文字檔案讀取寫入
尚硅谷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
此篇文章的評論功能已經停用。