在golang中,文件读写主要通过os、bufio和已整合至os包的原ioutil功能实现;os包提供底层控制,适合精细操作但需手动处理缓冲与错误;ioutil包因api碎片化被弃用,其readfile和writefile等功能由os.readfile和os.writefile替代,提升了api一致性;bufio包通过内存缓冲机制减少系统调用,显著提升大文件处理、逐行读取和频繁小块读写时的性能,适用于需高效i/o的场景。使用时需注意os包的错误处理、资源释放(如defer file.close)以及bufio.writer的flush调用以确保数据写入。

在Golang中,文件读写主要通过
os
io/ioutil
os
bufio
os
ioutil
os
bufio
os
在Go语言中进行文件读写,我们通常会根据场景选择不同的策略。
使用 os
立即学习“go语言免费学习笔记(深入)”;
os
package main
import (
"fmt"
"io"
"os"
)
func main() {
// 写入文件示例
fileName := "example.txt"
content := []byte("Hello, Golang file I/O!\nAnother line.\n")
file, err := os.Create(fileName) // 如果文件不存在则创建,存在则清空
if err != nil {
fmt.Printf("创建文件失败: %v\n", err)
return
}
defer file.Close() // 确保文件关闭
n, err := file.Write(content)
if err != nil {
fmt.Printf("写入文件失败: %v\n", err)
return
}
fmt.Printf("成功写入 %d 字节到 %s\n", n, fileName)
// 读取文件示例
readFileName := "example.txt"
readFile, err := os.Open(readFileName) // 只读方式打开文件
if err != nil {
fmt.Printf("打开文件失败: %v\n", err)
return
}
defer readFile.Close()
buffer := make([]byte, 1024) // 创建一个缓冲区
for {
bytesRead, err := readFile.Read(buffer)
if err != nil {
if err == io.EOF {
break // 文件读取完毕
}
fmt.Printf("读取文件失败: %v\n", err)
return
}
fmt.Printf("读取到内容: %s", string(buffer[:bytesRead]))
}
}
使用 os.ReadFile
os.WriteFile
ioutil
从Go 1.16开始,
io/ioutil
os
ioutil.ReadFile
ioutil.WriteFile
os.ReadFile
os.WriteFile
package main
import (
"fmt"
"os"
)
func main() {
// 写入文件示例
fileName := "simple_write.txt"
content := []byte("This is a simple line written with os.WriteFile.\n")
err := os.WriteFile(fileName, content, 0644) // 0644是文件权限,读写所有者,只读其他人
if err != nil {
fmt.Printf("使用 os.WriteFile 写入文件失败: %v\n", err)
return
}
fmt.Printf("成功使用 os.WriteFile 写入到 %s\n", fileName)
// 读取文件示例
readFileName := "simple_write.txt"
data, err := os.ReadFile(readFileName)
if err != nil {
fmt.Printf("使用 os.ReadFile 读取文件失败: %v\n", err)
return
}
fmt.Printf("使用 os.ReadFile 读取到内容:\n%s", string(data))
}
使用 bufio
bufio
os
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// 写入文件示例 (带缓冲)
fileName := "buffered_write.txt"
file, err := os.Create(fileName)
if err != nil {
fmt.Printf("创建文件失败: %v\n", err)
return
}
defer file.Close()
writer := bufio.NewWriter(file) // 创建一个带缓冲的写入器
_, err = writer.WriteString("第一行内容\n")
if err != nil {
fmt.Printf("写入失败: %v\n", err)
return
}
_, err = writer.WriteString("第二行内容,这是通过缓冲区写入的。\n")
if err != nil {
fmt.Printf("写入失败: %v\n", err)
return
}
// 确保所有缓冲数据都被写入到文件中
err = writer.Flush()
if err != nil {
fmt.Printf("刷新缓冲区失败: %v\n", err)
return
}
fmt.Printf("成功使用 bufio 写入到 %s\n", fileName)
// 读取文件示例 (带缓冲)
readFileName := "buffered_write.txt"
readFile, err := os.Open(readFileName)
if err != nil {
fmt.Printf("打开文件失败: %v\n", err)
return
}
defer readFile.Close()
reader := bufio.NewReader(readFile) // 创建一个带缓冲的读取器
for {
line, err := reader.ReadString('\n') // 逐行读取直到遇到换行符
if err != nil {
if err == io.EOF {
fmt.Printf("读取到文件末尾。\n")
break
}
fmt.Printf("读取行失败: %v\n", err)
return
}
fmt.Printf("读取到行: %s", strings.TrimSpace(line)) // TrimSpace去除可能的换行符
}
}
os
os
os
file.Sync()
核心能力方面,
os.Open()
os.Create()
os.OpenFile()
*os.File
Read()
Write()
Close()
然而,这种强大也伴随着一些需要注意的地方。首先是错误处理。
os
error
defer file.Close()
再者,
os
Read()
Write()
bufio
os
ioutil
os
io/ioutil
ioutil
ioutil.ReadFile
ioutil.WriteFile
然而,随着Go语言的发展,社区发现
io/ioutil
os
os
ioutil
os
因此,从Go 1.16版本开始,
io/ioutil
os
ioutil.ReadFile(filename string)
os.ReadFile(filename string)
ioutil.WriteFile(filename string, data []byte, perm os.FileMode)
os.WriteFile(filename string, data []byte, perm os.FileMode)
ioutil.ReadAll(r io.Reader)
io.ReadAll(r io.Reader)
io
ioutil.NopCloser(r io.Reader)
io.NopCloser(r io.Reader)
尽管
io/ioutil
os
io
bufio
bufio
bufio
在底层,无论是
os.Read
os.Write
bufio
bufio.Reader
bufio.Reader
ReadByte()
ReadString('\n')bufio.Writer
bufio.Writer
Flush()
Writer
这种缓冲机制的优点在于:
那么,
bufio
bufio
os.ReadFile
bufio.Reader
ReadString('\n')ReadLine()
bufio.Writer
bufio
net.Conn
当然,使用
bufio.Writer
Flush()
bufio
以上就是Golang实现文件读写有哪些方式 对比os/ioutil/bufio三种方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号