基础的文件操作方法
go里面的文件操作封装在os包里面的File结构体中,要用的时候最好去查下官方文档,这里介绍下基本的文件操作。
- 打开关闭文件
import(
"os"
)
func main() {
// Open返回*File指针,后续的操作都通过*File对象操作
file, err := os.Open("/home/lzs/tmp.txt")
if err != nil {
// ...
}
err = file.Close()
if err != nil {
// ...
}
}
- 带缓冲读取文件 – bufio包的reader方法
import(
"fmt"
"os"
)
func main() {
// Open返回*File指针,后续的操作都通过*File对象操作
file, err := os.Open("/home/lzs/tmp.txt")
if err != nil {
// ...
}
// reader默认缓冲区大小为4096
reader := bufio.NewReader(file)
for {
// 读取到\n就结束这次读取
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
fmt.Print(str)
}
defer file.Close()
}
- 一次性读取文件 – ioutil包的相关函数方法
文件不大时推荐使用ioutil包的函数一次性读取文件
使用ioutil下的ReadFile函数可一次性读取文件,无需显式地打开关闭文件。
import(
"fmt"
"io/ioutil"
)
func main() {
file := "/home/test/file.txt"
content_slice, err := ioutil.ReadFile(file)
if err != nil {
// ...
}
fmt.Printf("read file ok")
}
- 创建及写文件
这里我们会用到os包里面的OpenFile函数,name是文件名,flag是打开模式,perm是权限设置
flag的取值有以下这些
perm的取值和linux权限控制一样,r是4,w是2,x是1,如果对所有用户和组都开放,那么就是0777
import(
"fmt"
"os"
"bufio"
)
func main() {
filepath := "./test.txt"
file, err := os.OpenFile(filepath, os.O_WRONLY | os.O_CREATE, 0666)
if err != nil {
fmt.Printf("open file error:%v", err)
return
}
defer file.Close()
str := "test write"
// 使用缓冲写
writer := bufio.NewWriter(file)
// 注意,这一步只是写到缓冲区,除非缓冲区满,不然不会写入硬盘
writer.WriteString(str)
// 落盘
writer.Flush()
}
- 判断文件是否存在
go中使用os.Stat()判断文件或文件夹是否存在
- 如果返回的错误为nil,则存在
- 如果返回错误值使用os.IsNotExist()判断为true,则不存在
- 其他返回类型不确定
- 文件拷贝
使用io包的Copy()
这个函数的参数需要使用bufio包的方法来创建writer和reader。