文件读写

在golang的标准库中有三个包可以读写文件osioutilbufioos是最基础文件操作功能,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包的ReadAllReadFile方法可以读取整个文件的内容到内存,对读取配置文件等小文件非常方便。

读文件

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")