文件与 IO
os.ReadFile/WriteFile、bufio 缓冲读写、io.Copy、defer 关闭
文件与 IO
Go 的 os + io 包提供了简洁高效的文件操作。defer f.Close() 是标配,bufio 处理大文件。
学完本章你将: 掌握 os.ReadFile/WriteFile、bufio、io.Copy、defer 关闭。
基础读写
go
package main
import (
"fmt"
"os"
)
func main() {
// 一次性全读
data, err := os.ReadFile("input.txt")
if err != nil {
fmt.Println("读取出错:", err)
return
}
fmt.Println(string(data))
// 一次性全写
content := []byte("Hello, Go!")
os.WriteFile("output.txt", content, 0644)
}
逐行读写(大文件)
go
import (
"bufio"
"os"
)
// 逐行读
f, _ := os.Open("large.txt")
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
line := scanner.Text()
fmt.Println(line)
}
// 缓冲写
writer := bufio.NewWriter(f)
writer.WriteString("Hello\n")
writer.Flush() // 确保写入磁盘
io.Copy —— 万能复制
go
// 文件复制(高效)
src, _ := os.Open("source.txt")
defer src.Close()
dst, _ := os.Create("dest.txt")
defer dst.Close()
io.Copy(dst, src) // 一行搞定
文件信息与目录
go
info, _ := os.Stat("file.txt")
info.Name() // 文件名
info.Size() // 大小
info.IsDir() // 是否目录
os.Mkdir("newdir", 0755)
os.MkdirAll("a/b/c", 0755) // 递归创建
os.Remove("file.txt")
os.RemoveAll("dir") // 递归删除