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 } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码