当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Go语言压缩和解压缩tar.gz文件的方法

Go语言压缩和解压缩tar.gz文件的方法

2017年12月08日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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语言程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网