在 Go 语言中,文件处理是一个非常重要的功能,它允许我们读取、写入和操作文件。无论是处理配置文件、日志文件,还是进行数据持久化,文件处理都是不可或缺的一部分。
Go 语言提供了丰富的标准库来支持文件处理,包括文件的打开、关闭、读取、写入、追加和删除等操作。
os 是核心库 :提供底层文件操作(创建、读写、删除等),大多数场景优先使用。
io 提供通用接口 :如 Reader / Writer ,可与文件、网络等数据源交互。
bufio 优化性能 :通过缓冲减少 I/O 操作次数,适合频繁读写。
ioutil 已弃用 :Go 1.16 后其功能迁移到 os 和 io 包。
path/filepath 处理路径 :跨平台兼容(Windows/Unix 路径分隔符差异)。
弃用的场景推荐使用方法
文件创建
在 Go 语言中,我们使用 os 包来创建文件。
os.Create 函数用于创建一个文件,并返回一个 *os.File 类型的文件对象。创建文件后,我们通常需要调用 Close 方法来关闭文件,以释放系统资源。
实例
文件的打开与关闭
在 Go 语言中,我们使用 os 包来打开和关闭文件。
os.Open 函数用于打开一个文件,并返回一个 *os.File 类型的文件对象。打开文件后,我们通常需要调用 Close 方法来关闭文件,以释放系统资源。
打开文件
在上面的代码中,我们使用 os.Open 打开了一个名为 example.txt 的文件。如果文件打开失败,程序会打印错误信息并退出。 defer file.Close() 确保在函数返回前关闭文件。
关闭文件是一个重要的步骤,它可以防止文件描述符泄漏。在 Go 中,我们通常使用 defer 语句来确保文件在函数结束时被关闭。
文件的读取
Go 语言提供了多种读取文件的方式,包括逐行读取、一次性读取整个文件等。我们可以使用 bufio 包来逐行读取文件,或者使用 ioutil 包来一次性读取整个文件。
逐行读取文件
在上面的代码中,我们使用 bufio.NewScanner 创建了一个扫描器,然后通过 scanner.Scan() 逐行读取文件内容,并使用 scanner.Text() 获取每一行的文本。
一次性读取整个文件
在这个例子中,我们使用 ioutil.ReadFile 一次性读取整个文件的内容,并将其转换为字符串打印出来。
文件的写入
Go 语言也提供了多种写入文件的方式,包括逐行写入、一次性写入等。我们可以使用 os 包来创建和写入文件。
逐行写入文件
在这个例子中,我们使用 os.Create 创建了一个名为 output.txt 的文件,并使用 bufio.NewWriter 创建一个写入器。然后,我们使用 fmt.Fprintln 将字符串写入文件,并调用 writer.Flush() 确保所有数据都被写入文件。
一次性写入文件
在这个例子中,我们使用 ioutil.WriteFile 一次性将字节数组写入文件。 0644 是文件的权限模式,表示文件所有者可以读写,其他用户只能读取。
文件的追加写入
有时候我们需要在文件的末尾追加内容,而不是覆盖原有内容。Go 语言提供了 os.OpenFile 函数来实现这一功能。
在这个例子中,我们使用 os.OpenFile 打开文件,并指定 os.O_APPEND 标志来在文件末尾追加内容。然后,我们使用 file.WriteString 将字符串追加到文件中。
文件的删除
在 Go 语言中,我们可以使用 os.Remove 函数来删除文件。
在这个例子中,我们使用 os.Remove 删除了名为 output.txt 的文件。如果文件删除失败,程序会打印错误信息。
文件信息与操作
获取文件信息
检查文件是否存在
重命名和移动文件
目录操作
创建目录
读取目录内容
删除目录
高级文件操作
文件复制
文件追加
临时文件和目录