文字檔案讀取寫入
尚硅谷Golang課

讀取

func main() {
	//打開一個文件
	file, err := os.Open("c:/test.txt")
	//有人叫file對象/指針/文件句柄
	if err != nil {
		fmt.Println("open file err=", err)
	}
	//看看文件是啥
	fmt.Printf("file=%v\n", file)
	//退出函數就關閉文件
	defer file.Close()

	//創建一個帶緩衝的reader,預設大小是4096
	reader := bufio.NewReader(file)
	for {
		str, err := reader.ReadString('\n') //讀到換行就結束
		fmt.Print(str)
		if err == io.EOF { //表示文件末尾
			break
		}
	}
	fmt.Println("\n讀取結束")

	//用ioutil.ReadFile一次讀完
	//這個包已經封裝了open跟close了,只適用在檔案大小不大的情境
	file2 := "c:/test.txt"
	str2, err2 := ioutil.ReadFile(file2)
	if err2 != nil {
		fmt.Println(err)
	}
	fmt.Printf("%s", str2) //原本輸出是[]byte,用%s轉

	//創建一個新檔案,寫入5句話
	filePath := "c:/abc.txt"
	file3, err3 := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err3)
		return
	}
	defer file3.Close() //及時關閉文件
	str3 := "hello\r\n"
	writer3 := bufio.NewWriter(file3)
	for i := 0; i < 5; i++ {
		writer3.WriteString(str3)
	}
	writer3.Flush() //因為本來是存在buf區要把它實際寫出來

	//覆蓋一個檔案,寫入3句話
	filePath4 := "c:/abc2.txt"
	file4, err4 := os.OpenFile(filePath4, os.O_WRONLY|os.O_TRUNC, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err4)
		return
	}
	defer file4.Close() //及時關閉文件
	str4 := "覆蓋\r\n"
	writer4 := bufio.NewWriter(file4)
	for i := 0; i < 3; i++ {
		writer4.WriteString(str4)
	}
	writer4.Flush() //因為本來是存在buf區要把它實際寫出來

	//打開一個檔案abc,追加寫入3句話
	file5, err4 := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err4)
		return
	}
	defer file5.Close() //及時關閉文件
	str5 := "追加\r\n"
	writer5 := bufio.NewWriter(file5)
	for i := 0; i < 3; i++ {
		writer5.WriteString(str5)
	}
	writer5.Flush() //因為本來是存在buf區要把它實際寫出來

	//打開一個檔案abc,讀取打印出來並追加寫入5句話
	file6, err4 := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err4)
		return
	}
	//先讀取
	reader6 := bufio.NewReader(file6)
	for {
		str, err := reader6.ReadString('\n')
		if err == io.EOF { //如果讀到末尾
			break
		}
		fmt.Print(str)
	}
	defer file6.Close() //及時關閉文件
	str6 := "追加2BBB\r\n"
	writer6 := bufio.NewWriter(file6)
	for i := 0; i < 5; i++ {
		writer6.WriteString(str6)
	}
	writer6.Flush() //因為本來是存在buf區要把它實際寫出來

}

寫入


func main() {
	//打開一個文件
	file, err := os.Open("c:/test.txt")
	//有人叫file對象/指針/文件句柄
	if err != nil {
		fmt.Println("open file err=", err)
	}
	//看看文件是啥
	fmt.Printf("file=%v\n", file)
	//退出函數就關閉文件
	defer file.Close()

	//創建一個帶緩衝的reader,預設大小是4096
	reader := bufio.NewReader(file)
	for {
		str, err := reader.ReadString('\n') //讀到換行就結束
		fmt.Print(str)
		if err == io.EOF { //表示文件末尾
			break
		}
	}
	fmt.Println("\n讀取結束")

	//用ioutil.ReadFile一次讀完
	//這個包已經封裝了open跟close了,只適用在檔案大小不大的情境
	file2 := "c:/test.txt"
	str2, err2 := ioutil.ReadFile(file2)
	if err2 != nil {
		fmt.Println(err)
	}
	fmt.Printf("%s", str2) //原本輸出是[]byte,用%s轉

	//創建一個新檔案,寫入5句話
	filePath := "c:/abc.txt"
	file3, err3 := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err3)
		return
	}
	defer file3.Close() //及時關閉文件
	str3 := "hello\r\n"
	writer3 := bufio.NewWriter(file3)
	for i := 0; i < 5; i++ {
		writer3.WriteString(str3)
	}
	writer3.Flush() //因為本來是存在buf區要把它實際寫出來

	//覆蓋一個檔案,寫入3句話
	filePath4 := "c:/abc2.txt"
	file4, err4 := os.OpenFile(filePath4, os.O_WRONLY|os.O_TRUNC, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err4)
		return
	}
	defer file4.Close() //及時關閉文件
	str4 := "覆蓋\r\n"
	writer4 := bufio.NewWriter(file4)
	for i := 0; i < 3; i++ {
		writer4.WriteString(str4)
	}
	writer4.Flush() //因為本來是存在buf區要把它實際寫出來

	//打開一個檔案abc,追加寫入3句話
	file5, err4 := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err4)
		return
	}
	defer file5.Close() //及時關閉文件
	str5 := "追加\r\n"
	writer5 := bufio.NewWriter(file5)
	for i := 0; i < 3; i++ {
		writer5.WriteString(str5)
	}
	writer5.Flush() //因為本來是存在buf區要把它實際寫出來

	//打開一個檔案abc,讀取打印出來並追加寫入5句話
	file6, err4 := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)
	if err3 != nil {
		fmt.Println("open file err=", err4)
		return
	}
	//先讀取
	reader6 := bufio.NewReader(file6)
	for {
		str, err := reader6.ReadString('\n')
		if err == io.EOF { //如果讀到末尾
			break
		}
		fmt.Print(str)
	}
	defer file6.Close() //及時關閉文件
	str6 := "追加2BBB\r\n"
	writer6 := bufio.NewWriter(file6)
	for i := 0; i < 5; i++ {
		writer6.WriteString(str6)
	}
	writer6.Flush() //因為本來是存在buf區要把它實際寫出來

	//將c:/abc的內容導入到c:abc2

	fileAPath := "c:/abc.txt"
	fileBPath := "c:/abc2.txt"

	data, err9 := ioutil.ReadFile(fileAPath)
	if err9 != nil {
		fmt.Println("文件讀取錯誤", err9)
		return
	}
	err = ioutil.WriteFile(fileBPath, data, 0666)
	if err != nil {
		fmt.Println("文件讀取錯誤", err)
		return
	}

}

上次修改於 2021-08-01

此篇文章的評論功能已經停用。