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

1345

被折叠的 条评论
为什么被折叠?



