go语言之文件处理

1、获取指定路径下的文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//参数:文件路径;是否递归;返回列表<br>func GetFiles(pathName string, recursive bool, f *[]string) error {
    rd, err := ioutil.ReadDir(pathName)
    if err != nil {
        return err
    }
    for _, fi := range rd {
        if fi.IsDir() {
            if recursive == true {
                err = GetFiles(pathName+"/"+fi.Name(), recursive, f)
                if err != nil {
                    return err
                }
            }
        } else {
            *f = append(*f, pathName+"/"+fi.Name())
        }
    }
    return nil
}

  

2、读取excel文件

1
2
3
4
5
6
7
8
9
10
11
12
13
func ReadExcel(excelPath string) (*[][]string, error) {
    var content [][]string
    xlsxRead, err := excelize.OpenFile(excelPath)
    if err != nil {
        return nil, err
    }
    sheet := xlsxRead.GetActiveSheetIndex()
    name := xlsxRead.GetSheetName(sheet)
    // log.Println("sheet name is " + name)
    content = xlsxRead.GetRows(name)
    // log.Println(content)
    return &content, nil
}

  

3、压缩文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
func Zip(srcFile string, destZip string) error {
    zipFile, err := os.Create(destZip)
    if err != nil {
        return err
    }
    defer zipFile.Close()
 
    archive := zip.NewWriter(zipFile)
    defer archive.Close()
 
    filepath.Walk(srcFile, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
 
        header, err := zip.FileInfoHeader(info)
        if err != nil {
            return err
        }
 
        header.Name = strings.TrimPrefix(path, filepath.Dir(srcFile)+"/")
        // header.Name = path
        if info.IsDir() {
            header.Name += "/"
        } else {
            header.Method = zip.Deflate
        }
 
        writer, err := archive.CreateHeader(header)
        if err != nil {
            return err
        }
 
        if !info.IsDir() {
            file, err := os.Open(path)
            if err != nil {
                return err
            }
            defer file.Close()
            _, err = io.Copy(writer, file)
        }
        return err
    })
 
    return err
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func Tar(source string) error {
    // tar --directory=files/source_data_export/20220324-121511 -cvf files/source_data_export/20220324-121511/0.tar 0/
    splitResult := strings.Split(source, "/")
    basePath := strings.Join(splitResult[0:len(splitResult)-1], "/")
    dirName := splitResult[len(splitResult)-1]
 
    cmd := exec.Command("tar", "--directory", basePath, "-cvf", source+".tar", dirName)
 
    //阻塞至等待命令执行完成
    err := cmd.Run()
    if err != nil {
        return err
    }
    return nil
}

  

4、解压文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
func Unzip(zipFile string, destDir string) error {
    zipReader, err := zip.OpenReader(zipFile)
    if err != nil {
        return err
    }
    defer zipReader.Close()
 
    for _, f := range zipReader.File {
        filePath := filepath.Join(destDir, f.Name)
        if f.FileInfo().IsDir() {
            err = os.MkdirAll(filePath, os.ModePerm)
            if err != nil {
                return err
            }
        } else {
            if err = os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
                return err
            }
 
            inFile, err := f.Open()
            if err != nil {
                return err
            }
            defer inFile.Close()
 
            outFile, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
            if err != nil {
                return err
            }
            defer outFile.Close()
            _, err = io.Copy(outFile, inFile)
            if err != nil {
                return err
            }
        }
    }
    return nil
}

  

5、判断文件是否存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func IsExist(path string) bool {
    _, err := os.Stat(path)
    if err != nil {
        if os.IsExist(err) {
            return true
        }
        if os.IsNotExist(err) {
            return false
        }
        fmt.Println(err)
        return false
    }
    return true
}<br><br>// Exists 判断所给路径文件/文件夹是否存在<br>func Exists(path string) bool {<br>   _, err := os.Stat(path) //os.Stat获取文件信息<br>   if err != nil {<br>      if os.IsExist(err) {<br>         return true<br>      }<br>      return false<br>   }<br>   return true<br>}

  

6、复制文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func Copy(srcFile, dstFile string) error {
    sourceFileStat, err := os.Stat(srcFile)
    if err != nil {
        return err
    }
 
    if !sourceFileStat.Mode().IsRegular() {
        return fmt.Errorf("%s is not a regular file", srcFile)
    }
 
    source, err := os.Open(srcFile)
    if err != nil {
        return err
    }
    defer source.Close()
 
    destination, err := os.Create(dstFile)
    if err != nil {
        return err
    }
 
    defer destination.Close()
    _, err = io.Copy(destination, source)
    return err
}

  

7、删除文件

1
2
3
4
5
6
7
8
9
10
11
12
func Remove(filePath string) error {
    var err error
    if !Exists(filePath) {
        err = fmt.Errorf("路径不存在")
        return err
    }
    err = os.Remove(filePath)
    if err != nil {
        return err
    }
    return nil
}

  

8、读写json文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
func WriteJson(data interface{}, path string) error {
    fmt.Println(data)
    // jsonByte, err := json.Marshal(data)
    jsonByte, err := json.MarshalIndent(data, "", " ")
    fp, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0755)
    if err != nil {
        return err
    }
    defer fp.Close()
    _, err = fp.Write(jsonByte)
    if err != nil {
        return err
    }
    return nil
}
 
func ReadJson(path string) (interface{}, error) {
    //打开文件
    jsonFile, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer jsonFile.Close()
 
    //读取为[]bytes类型
    byteData, err := ioutil.ReadAll(jsonFile)
    if err != nil {
        return nil, err
    }
    var returnData interface{}
    err = json.Unmarshal(byteData, &returnData)
    if err != nil {
        return nil, err
    }
 
    return returnData, nil
}

  

9、判断文件夹是否存在

1
2
3
4
5
6
7
8
9
10
11
// PathExists 判断文件夹是否存在
func PathExists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil {
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}

  

 

posted @   ☞@_@  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示