章节

14.4 带缓冲读取文件

本篇学习 bufio.Scanner 的带缓冲读取方式,并能逐行读取文本文件。

带缓冲读取文件

概念说明

bufio 提供带缓冲的 IO 能力。
读取文本文件时,bufio.Scanner 常用于逐行扫描。

逐行读取适合日志、配置、普通文本等按行处理的场景。
如果单行内容特别大,需要关注 Scanner 默认缓冲区限制。

语法/规则

  1. 使用 bufio.NewScanner(file) 创建扫描器。
  2. 默认按行扫描。
  3. 使用 scanner.Scan() 推进到下一行。
  4. 使用 scanner.Text() 获取当前行文本。
  5. 循环结束后使用 scanner.Err() 检查扫描错误。

逐行读取示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	path := "lines.txt"
	err := os.WriteFile(path, []byte("one\ntwo\n"), 0644)
	if err != nil {
		panic(err)
	}
	defer os.Remove(path)

	file, err := os.Open(path)
	if err != nil {
		panic(err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file) // 默认按行扫描
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
	if err := scanner.Err(); err != nil {
		panic(err)
	}
}

输出结果:

1
2
one
two

常见错误

  1. 循环结束后不检查 scanner.Err(),无法发现中途扫描错误。
  2. Scanner 处理超长行时不调整缓冲区,可能触发 token too long
  3. 忘记关闭底层文件,导致资源未及时释放。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字