文件读写
在golang的标准库中有三个包可以读写文件os
,ioutil
,bufio
。
os
是最基础文件操作功能,ioutil
提供读写小文件的简便功能,bufio
提供带缓存的区高性能读写功能。
使用io
包读取写文件
f, err := os.OpenFile("a.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0755) //文件不存在会创建 写文件会追加在末尾
if err != nil {
log.Fatal(err)
}
f.Write([]byte("aaaa"))
f.WriteString("bbbb")
f.Close() //打开成功的文件句柄 不用的时候一定记得关闭
ff, err := os.OpenFile("a.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0755)
b := make([]byte, 1024)
n, err := ff.Read(b)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(b[:n])) //aaaabbbb
os.Remove("a.txt") //删除文件
f.Close()
使用ioutil
包读写文件
ioutil
包的ReadAll
和ReadFile
方法可以读取整个文件的内容到内存,对读取配置文件等小文件非常方便。
读文件
f, _ := os.Open("aa.txt")
b, _ := ioutil.ReadAll(f)
fmt.Println(string(b))
f.Close()
b, _ = ioutil.ReadFile("aa.txt")
fmt.Println(string(b))
对于大文件读取需要使用bufio
包。
写文件
ioutil.WriteFile("aa.txt", []byte("aaaaa\nbbbbb\n"), 0666)
ioutil.WriteFile
写文件会覆盖原先所有内容。
bufio
读写文件
使用bufio
按行读取文件
f, _ := os.Open("aa.txt")
defer f.Close()
buf := bufio.NewReader(f)
for {
line, _, err := buf.ReadLine()
if err != nil {
break
}
fmt.Println(string(line))
}
使用bufio
写文件
f, _ := os.OpenFile("aa.txt", os.O_APPEND, 0755) //追加方式写文件
defer f.Close()
w := bufio.NewWriter(f)
w.Write([]byte("aaa\n"))
w.WriteString("bbb\n")