华域联盟 Golang Go语言压缩和解压缩tar.gz文件的方法

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

本文实例讲述了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语言压缩和解压缩tar.gz文件的方法

转载请保留出处和原文链接:https://www.cnhackhy.com/109934.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们