Go语言压缩和解压缩tar.gz文件的方法
发布时间:2020-12-16 19:33:47 所属栏目:大数据 来源:网络整理
导读:本篇章节讲解Go语言压缩和解压缩tar.gz文件的方法。供大家参考研究。具体分析如下: golang处理压缩包,最常用的就是tar.gz了,这里写了一个测试一下。 压缩文件: 复制代码 代码如下: package main import ( "fmt" "os" "io" "archive/tar" "compress
本篇章节讲解Go语言压缩和解压缩tar.gz文件的方法。分享给大家供大家参考。具体分析如下: golang处理压缩包,最常用的就是tar.gz了,这里写了一个测试一下。 压缩文件: 复制代码 代码如下: package main
import ( "fmt" "os" "io" "archive/tar" "compress/gzip" ) func main() { // file write fw,err := os.Create("tar/lin_golang_src.tar.gz") if err != nil { panic(err) } defer fw.Close() // gzip write gw := gzip.NewWriter(fw) defer gw.Close() // tar write tw := tar.NewWriter(gw) defer tw.Close() // 打开文件夹 dir,err := os.Open("file/") if err != nil { panic(nil) } defer dir.Close() // 读取文件列表 fis,err := dir.Readdir(0) if err != nil { panic(err) } // 遍历文件列表 for _,fi := range fis { // 逃过文件夹,我这里就不递归了 if fi.IsDir() { continue } // 打印文件名称 fmt.Println(fi.Name()) // 打开文件 fr,err := os.Open(dir.Name() + "/" + fi.Name()) if err != nil { panic(err) } defer fr.Close() // 信息头 h := new(tar.Header) h.Name = fi.Name() h.Size = fi.Size() h.Mode = int64(fi.Mode()) h.ModTime = fi.ModTime() // 写信息头 err = tw.WriteHeader(h) if err != nil { panic(err) } // 写文件 _,err = io.Copy(tw,fr) if err != nil { panic(err) } } fmt.Println("tar.gz ok") } 解压文件: 复制代码 代码如下: package main
import ( "fmt" "os" "io" // "time" "archive/tar" "compress/gzip" ) func main() { // file read fr,err := os.Open("tar/lin_golang_src.tar.gz") if err != nil { panic(err) } defer fr.Close() // gzip read gr,err := gzip.NewReader(fr) if err != nil { panic(err) } defer gr.Close() // tar read tr := tar.NewReader(gr) // 读取文件 for { h,err := tr.Next() if err == io.EOF { break } if err != nil { panic(err) } // 显示文件 fmt.Println(h.Name) // 打开文件 fw,err := os.OpenFile("file2/" + h.Name,os.O_CREATE | os.O_WRONLY,0644/*os.FileMode(h.Mode)*/) if err != nil { panic(err) } defer fw.Close() // 写文件 _,err = io.Copy(fw,tr) if err != nil { panic(err) } } fmt.Println("un tar.gz ok") } 这样以后打包下载东西的时候就可以使用了。 希望本文所述对大家的Go语言程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |