本文实例讲述了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语言程序设计有所帮助。
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
-
Go打包二进制文件的实现
背景众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。操作需求:打包部署到centos7笔者打包...
[阅读全文]
-
-
-
-
golang语言编码规范的实现
本规范旨在为日常go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性。本规范将从命名规范,注释规范,代码风格和 ...
[阅读全文]
-
-
-
网友评论