Go语言实战案例-合并多个文本文件为一个

以下是《Go语言100个实战案例》中的 文件与IO操作篇 - 案例21:合并多个文本文件为一个 的完整内容,适用于初学者学习文件读取与写入的综合运用。


🎯 案例目标

使用 Go 语言将指定目录下的多个 .txt 文件,合并成一个新的总文件。


🧩 应用场景

  • • 将多个日志、分段文档、数据文件整合为单个文件
  • • 文件归档、汇总导出操作
  • • 初学者锻炼文件操作能力的实战案例

🧠 涉及知识点

  • • 遍历目录读取所有 .txt 文件
  • • 使用 bufioos 进行文件读取与写入
  • • 文件拼接的顺序与内容处理

📂 示例文件结构(同一目录下)

kotlin 复制代码
data/
├── part1.txt
├── part2.txt
└── part3.txt

💻 示例代码:合并文本文件

go 复制代码
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)

内容会按照文件遍历顺序依次写入,内容中间自动添加换行分隔。例如:

csharp 复制代码
[part1.txt 内容]
...
[part2.txt 内容]
...
[part3.txt 内容]

🛠 技术说明

功能 使用
遍历目录 filepath.Walk
打开文件 os.Open, os.Create
读取写入 bufio.NewReader, io.Copy
判断文件类型 info.IsDir(), filepath.Ext()

🔄 可选优化方向

  • • 对文件名排序后再合并
  • • 跳过空文件或大小为 0 的文件
  • • 每段前添加注释 // 文件名:xxx.txt
  • • 增加合并进度提示或统计信息

✅ 小结

该案例通过完整示例演示了如何使用 Go 语言合并多个文本文件,帮助你熟练掌握文件遍历、读取、写入、扩展处理等实用技能,是文件处理场景的常见需求。


相关推荐
星辰徐哥5 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥5 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约5 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee5 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐5 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs5 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐5 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司5 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪5 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
追逐时光者5 小时前
一个基于 .NET 与 Avalonia 构建、面向 TrinityCore 的开源 WoW 数据库编辑器
后端·.net