以下是《Go语言100个实战案例》中的 文件与IO操作篇 - 案例21:合并多个文本文件为一个 的完整内容,适用于初学者学习文件读取与写入的综合运用。
🎯 案例目标
使用 Go 语言将指定目录下的多个 .txt 文件,合并成一个新的总文件。
🧩 应用场景
- • 将多个日志、分段文档、数据文件整合为单个文件
- • 文件归档、汇总导出操作
- • 初学者锻炼文件操作能力的实战案例
🧠 涉及知识点
- • 遍历目录读取所有
.txt文件 - • 使用
bufio、os进行文件读取与写入 - • 文件拼接的顺序与内容处理
📂 示例文件结构(同一目录下)
data/ ├── part1.txt ├── part2.txt └── part3.txt
💻 示例代码:合并文本文件
package main import ( "bufio" "fmt" "io" "os" "path/filepath" ) func main() { inputDir := "./data" // 输入目录 outputFile := "merged_output.txt" // 输出文件名 // 创建输出文件 out, err := os.Create(outputFile) if err != nil { fmt.Println("创建输出文件失败:", err) return } defer out.Close() // 遍历目录下所有 .txt 文件 err = filepath.Walk(inputDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // 只处理 .txt 文件 if !info.IsDir() && filepath.Ext(path) == ".txt" { fmt.Println("正在合并文件:", path) err := appendFileContent(path, out) if err != nil { fmt.Println("合并失败:", err) } } return nil }) if err != nil { fmt.Println("遍历目录出错:", err) return } fmt.Println("所有文件合并完成,输出为:", outputFile) } // 将单个文件内容追加到输出文件 func appendFileContent(filePath string, out *os.File) error { in, err := os.Open(filePath) if err != nil { return err } defer in.Close() reader := bufio.NewReader(in) _, err = io.Copy(out, reader) if err != nil { return err } // 每个文件内容后加换行分隔 _, err = out.WriteString("\n") return err }
📤 合并结果(merged_output.txt)
内容会按照文件遍历顺序依次写入,内容中间自动添加换行分隔。例如:
[part1.txt 内容] ... [part2.txt 内容] ... [part3.txt 内容]
🛠 技术说明
| 功能 | 使用 |
| 遍历目录 | filepath.Walk |
| 打开文件 | os.Open, os.Create |
| 读取写入 | bufio.NewReader, io.Copy |
| 判断文件类型 | info.IsDir(), filepath.Ext() |
🔄 可选优化方向
- • 对文件名排序后再合并
- • 跳过空文件或大小为 0 的文件
- • 每段前添加注释
// 文件名:xxx.txt - • 增加合并进度提示或统计信息
✅ 小结
该案例通过完整示例演示了如何使用 Go 语言合并多个文本文件,帮助你熟练掌握文件遍历、读取、写入、扩展处理等实用技能,是文件处理场景的常见需求。