Go 文件读写
- 当文件较小(KB 级别)时,ioutil > bufio > os。
- 当文件大小比较常规(MB 级别)时,三者差别不大,但 bufio 又是已经显现出来。
- 当文件较大(GB 级别)时,bufio > os > ioutil。
os.File
文件不存在则创建,文件存在则将文件内容清空
// 文件不存在则创建,文件存在则将文件内容清空
file, err := os.Create(filePath)
defer func() {
if file != nil {
// 关闭文件
file.Close()
}
}()
if err != nil {
return
}
以只读方式打开文件
// 以只读方式打开文件
file, err := os.Open(filePath)
defer func() {
if file != nil {
// 关闭文件
file.Close()
}
}()
if err != nil {
return
}
以只读、只写、读写模式打开文件
// 以不同的模式打开文件
file,err := os.OpenFile(filePath, flag, perm)
defer func() {
if file != nil {
// 关闭文件
file.Close()
}
}()
if err != nil {
return
}
flag:
模式 含义 os.O_WRONLY 只写 os.O_CREATE 创建文件 os.O_RDONLY 只读 os.O_RDWR 读写 os.O_TRUNC 清空 os.O_APPEND 追加 perm 权限取值范围(0-7):
- 0-没有任何权限
- 1-执行权限,如果是可执行文件,是可以运行的
- 2-写权限
- 3-写权限与执行权限
- 4-读权限
- 5-读权限与执行权限
- 6-读权限与写权限
- 7-读权限、写权限、执行权限
常用组合
// 如果已经存在,则失败
os.O_WRONLY|os.O_CREATE|os.O_EXCL
// 如果已经存在,会覆盖写,不会清空原来的文件,而是从头直接覆盖写
os.O_WRONLY|os.O_CREATE
// 如果已经存在,则在尾部添加写
os.O_WRONLY|os.O_CREATE|os.O_APPEND
写入数据(字符串)
// 写入内容
_, err := file.WriteString("Hello Go!")
if err != nil {
return
}
写入数据([]Byte)
data := "我是数据\r\n"
_, err := file.Write([]byte(data))
if err != nil {
return
}
关闭文件
// 关闭文件
file.Close()
bufio
filePath := "1.txt"
// 文件不存在则创建,文件存在则将文件内容清空
file, err := os.Create(filePath)
defer func() {
if file != nil {
// 关闭文件
file.Close()
}
}()
if err != nil {
panic(err)
}
// 使用 bufio 基于缓存操作io流
// 需要传入 一个 io 接口包下的 Writer 接口实现类 而 file 实现了该 方法
writer := bufio.NewWriter(file)
// 写入String
writer.WriteString(" 写入缓存字符串内容")
data := "写入缓冲[]byte"
// 写入[]byte
writer.Write([]byte(data))
// 写入byte
writer.WriteByte(1)
// 写入rune
writer.WriteRune(1)
//需要将缓存中的数据刷新到硬盘上
writer.Flush()
ioutil
err := ioutil.WriteFile(filePath, []byte("今天天气真好"), os.ModePerm)
if err != nil {
return
}
参考文档
https://www.jb51.net/article/244570.htm
https://www.jb51.net/article/254073.htm
http://t.zoukankan.com/landv-p-13140156.html