81 lines
1.7 KiB
Go
81 lines
1.7 KiB
Go
package file
|
||
|
||
import (
|
||
"bufio"
|
||
"fmt"
|
||
"os"
|
||
"path/filepath"
|
||
"strings"
|
||
|
||
"be.ems/src/framework/logger"
|
||
)
|
||
|
||
// WriterFileTXT 写入txt文件 sep 分割符号 需要转换数据
|
||
//
|
||
// 例如:
|
||
// data := [][]string{}
|
||
// data = append(data, []string{"姓名", "年龄", "城市"})
|
||
// data = append(data, []string{"1", "2", "3"})
|
||
// err := file.WriterFileTXT(data, filePath)
|
||
func WriterFileTXT(data [][]string, sep string, filePath string) error {
|
||
// 获取文件所在的目录路径
|
||
dirPath := filepath.Dir(filePath)
|
||
|
||
// 确保文件夹路径存在
|
||
err := os.MkdirAll(dirPath, os.ModePerm)
|
||
if err != nil {
|
||
logger.Errorf("CreateFile MkdirAll %v", err)
|
||
}
|
||
|
||
// 创建或打开文件
|
||
file, err := os.Create(filePath)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer file.Close()
|
||
|
||
// 创建一个 Writer 对象,用于将数据写入文件
|
||
writer := bufio.NewWriter(file)
|
||
for _, row := range data {
|
||
line := strings.Join(row, sep)
|
||
fmt.Fprintln(writer, line)
|
||
}
|
||
|
||
// 将缓冲区中的数据刷新到文件中
|
||
err = writer.Flush()
|
||
if err != nil {
|
||
logger.Errorf("CreateFile Flush %v", err)
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// ReadFileTXT 读取Txt文件,sep 分割符号 转换数组数据
|
||
func ReadFileTXT(sep string, filePath string) [][]string {
|
||
// 创建 map 存储数据
|
||
arr := make([][]string, 0)
|
||
|
||
// 打开文本文件
|
||
file, err := os.Open(filePath)
|
||
if err != nil {
|
||
logger.Errorf("OpenFile Open %v", err)
|
||
return arr
|
||
}
|
||
defer file.Close()
|
||
|
||
// 创建一个 Scanner 对象,用于逐行读取文件内容
|
||
scanner := bufio.NewScanner(file)
|
||
if scanner.Err() != nil {
|
||
logger.Errorf("OpenFile NewScanner %v", scanner.Err())
|
||
return arr
|
||
}
|
||
|
||
for scanner.Scan() {
|
||
line := scanner.Text()
|
||
fields := strings.Split(line, sep)
|
||
arr = append(arr, fields)
|
||
}
|
||
|
||
return arr
|
||
}
|