golang读写文件
-
读文件方式一
// 方式一,以字节为单位读文件
package main
import (
"fmt"
"io"
"os"
)
func main() {
// 获得文件句柄, 只读权限
f, err := os.Open("文件路径")
if err != nil {
fmt.Println("文件打开失败", err)
return
}
defer func() {
err := f.Close()
if err != nil {
fmt.Println("文件关闭失败")
}
}()
// 创建临时数据存放数组
tmpBuf := make([]byte, 1024)
// 定义byte数组,用来存放所有数据
var res []byte
for {
count, err := f.Read(tmpBuf)
// count最大值是tmpBuf的长度
if err == io.EOF {
// 读取到了文件末尾
break
}
currBytes := tmpBuf[:count] // 从临时数组中提取读到的数据
res = append(res, currBytes...) // 拼接新读取的数据
}
fmt.Println(string(res)) // 打印结果
} -
读文件方式二
// 方式二,一次读取文件全部内容
package main
import (
"fmt"
"os"
)
func main() {
// 读取文件全部内容,并返回byte数组
content, err := os.ReadFile("文件路径")
if err != nil {
fmt.Println("文件读取失败")
return
}
fmt.Println(string(content))
}
-
写文件
package main
import (
"fmt"
"os"
)
func main() {
// 获得文件句柄,需指定读写方式(第二个参数)和文件权限(第三个参数),文件权限的参数值对应linux下的文件权限数字。
f, err := os.OpenFile("文件路径", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0664)
if err != nil {
fmt.Println("文件打开失败")
return
}
defer func() {
_ = f.Close()
}()
// 要写入的数据
data := []byte("Hello World!\n")
// 写入数据,返回写入数据的字节数
count, err := f.Write(data)
if err != nil {
fmt.Println("文件写入失败")
return
}
fmt.Println("写入字节数", count)
// 刷入磁盘
_ = f.Sync()
}
// 读写方式介绍
/*
os.O_CREATE: create if none exists 不存在则创建
os.O_RDONLY: read-only 只读
os.O_WRONLY: write-only 只写
os.O_RDWR: read-write 可读可写
os.O_TRUNC: truncate when opened 文件长度截为0:即清空文件
os.O_APPEND: append 追加新数据到文件
*/
// 权限数字,可搜索linux权限详解。