文件操作
os 包提供了平台无关的操作系统功能接口。尽管错误处理是 go 风格的,但设计是 Unix 风格的;所以,失败的调用会返回 error 而非错误码。通常 error 里会包含更多信息。例如,如果使用一个文件名的调用(如 Open、Stat)失败了,打印错误时会包含该文件名,错误类型将为 *PathError,其内部可以解包获得更多信息。
os 包规定为所有操作系统实现的接口都是一致的。有一些某个系统特定的功能,需要使用 syscall 获取。实际上,os 依赖于 syscall。在实际编程中,我们应该总是优先使用 os 中提供的功能,而不是 syscall。
带缓冲读取
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("/Users/yangsx/Desktop/helloworld.txt") // 返回一个文件对象/文件指针/文件句柄
defer file.Close() // 关闭File句柄
if err != nil {
fmt.Println("open file err: ", err)
}
// 创建一个*Reader,默认带大小4096字节的缓冲区
reader := bufio.NewReader(file)
// 循环读取文件内容
for {
str, err := reader.ReadString('\n') // 读取到换行符就结束
if err == io.EOF { // 如果读取到文件末尾
break
}
// 输出该行
fmt.Print(str) // 会把换行符打印
}
fmt.Println("----文件读取结束----")
}一次全文读取
1.16后,
ioutil实际上调用os.ReadFile()函数,推荐直接使用os.ReadFile()函数
打开文件的方式
使用func OpenFile(name string, flag int, perm FileMode) (file *File, err error)函数打开文件并指定打开模式:
一次性写入
实际调用
os.WriteFile()函数
带缓冲追加写入
覆盖写入
使用选项, os.O_TRUNC 清空文件
判断文件状态
判断文件/文件夹是否存在:
获取文件状态:
文件拷贝
最后更新于
这有帮助吗?