文件操作
func main() {
// 创建文件
// 创建文件会清空已存在的文件
// 创建文件,文件路径,路径1:\\ 2:直接 / 即可
f, err := os.Create("./users/aaa.txt")
if err != nil {
// 文件路径不存在
// 文件无操作权限
// 程序打开文件上限
fmt.Println(err)
return
} else {
// 如果 \n 不会换行:windows换行为:\r\n
// 写入字符串
f.WriteString("gogogo\n")
f.WriteString("11111\n")
// 写入切片
s := []byte{'1', '2', 'h'}
c, err := f.Write(s)
if err == nil {
fmt.Println(c)
}
// l, err := f.Seek(0, os.SEEK_END) // 获取文件大小
l, err := f.Seek(0, io.SeekEnd) // 获取文件大小
fmt.Println(l)
fmt.Println(err)
// 写入指定位置的切片
f.WriteAt([]byte("123LINWANG"), l) // 在l位置开始,写入文件
f.WriteAt([]byte("aaaaaaa"), 0) // 覆盖原来的,包括换行符
f.WriteAt([]byte("fdjdkfd"), 100) // 中间会有间隙,可以运行
defer func() {
fmt.Println("文件关闭了") // 整个main函数执行结束才执行
}() // 关闭文件
}
f.Close()
// 打开文件
// 只读方式打开
fo,erro := os.Open("./users/aaa.txt")
// 可读写,打开方式,权限 0-7
fp, errp := os.OpenFile("./users/aaa.txt", os.O_RDWR, 6)
if errp == nil {
fp.WriteString("zzzzzzzzz")
}
fp.Close()
fpp, errpp := os.Open("./users/aaa.txt")
fmt.Println(errpp)
a := make([]byte, 10)
res, _ := fpp.Read(a) // 返回内容 长度,err
// At end of file, Read returns 0, io.EOF.
// 读取到文件末尾,返回:0, io.EOF
fmt.Println(string(a[:res])) // 读取到了切片中
fpp.Close()
// 按行读取
// 文件缓冲区:磁盘存储速度比cpu速度慢,要有缓冲区。存取预存,缓冲区更快。
fppp, _ := os.Open("./users/aaa.txt")
r := bufio.NewReader(fppp) // 创建文件缓冲区
for {
rr, errrr := r.ReadBytes('\n') // 返回读取的内容和err,以换行符作为一行的结尾
fmt.Println("-------------------")
fmt.Println(string(rr))
if errrr != nil { // 最后一行的时候:errrr为:EOF
fmt.Println(errrr)
break
}
fmt.Println("-------------------")
}
fppp.Close()
}