【Golang学习笔记】文本文件读取写入合并

该代码示例展示了如何用Golang将一个目录下包含的所有子目录中的文件合并到一个单一文件中,不删除原始小文件。函数MergeFile遍历指定目录,递归处理子目录,并使用ReadFile和WriteFile函数读取和写入文件内容。
数据源

使用pig工具导出的hbase数据有许多分片且数据格式一致,需要合并至单个文件进行处理在这里插入图片描述

golang代码

代码会把输入的目录下包含的子目录的所有文件一并合并,直接生成合并文件,不删除小文件

package main

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

func main() {
	MergeFile("my_utils/files/tmp_20230308", "my_utils/files/merge_20230309.txt")
}

// MergeFile 输入目录inPath,合并该目录下文件,输出至outPath
func MergeFile(inPath string, outPath string) {
	dir, err := os.ReadDir(inPath)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(dir)

	for _, entry := range dir {
		name := entry.Name()
		nPath := fmt.Sprintf("%s/%s", inPath, name)
		// 如果是目录就递归
		if entry.IsDir() {
			MergeFile(nPath, outPath)
			continue
		}
		fileData := ReadFile(nPath)
		WriteFile(fileData, outPath)
		fmt.Println(nPath)
	}
}

// WriteFile 字符串写入文件
func WriteFile(s string, outPath string) {
	file, err := os.OpenFile(outPath, os.O_CREATE|os.O_APPEND, 077223)
	if err != nil {
		fmt.Println(err)
		return
	}
	// 带缓冲写入(兼容大文件写入)
	buf := bufio.NewWriter(file)
	buf.WriteString(s)
	buf.Flush()
}

// ReadFile 读取单个文件返回字符串
func ReadFile(readPath string) string {
	by, err := os.ReadFile(readPath)
	if err != nil {
		fmt.Printf("目录%s 文件写入失败:%s", readPath, err)
		return ""
	}
	return string(by)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值