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

作者:不吃皮蛋 时间:2024-05-21 10:21:46 

本文实例讲述了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语言,压缩,解压
0
投稿

猜你喜欢

  • pandas-resample按时间聚合实例

    2023-05-26 19:07:50
  • flask循环导入的问题解决

    2023-10-01 10:28:52
  • 解决jupyter加载文件失败的问题

    2022-07-21 19:17:05
  • 对python添加模块路径的三种方法总结

    2023-11-26 04:01:35
  • 使用JS的DOM文档对象模型获取前端循环的参数

    2024-04-10 13:54:46
  • Python的Django框架中自定义模版标签的示例

    2022-10-31 22:28:56
  • Vue解决ajax跨域的问题

    2024-04-30 10:19:45
  • Python logging简介详解

    2022-05-12 09:27:02
  • MySQL左联多表查询where条件写法示例

    2024-01-14 08:44:43
  • 基于梯度爆炸的解决方法:clip gradient

    2022-07-24 02:19:09
  • python实现ip代理池功能示例

    2023-07-30 16:36:06
  • SQL Server利用sp_spaceused如何查看表记录存在不准确的情况

    2024-01-20 07:40:10
  • TensorFlow2.0矩阵与向量的加减乘实例

    2023-12-30 13:21:00
  • Python随机数用法实例详解【基于random模块】

    2023-10-26 08:48:49
  • Python实现屏幕代码雨效果的示例代码

    2021-08-29 12:48:09
  • PDO::_construct讲解

    2023-06-06 03:22:31
  • tensorflow实现将ckpt转pb文件的方法

    2023-03-24 19:05:05
  • TensorFLow 数学运算的示例代码

    2023-12-13 21:30:16
  • python通过opencv实现批量剪切图片

    2021-05-12 12:50:14
  • 解决Pytorch内存溢出,Ubuntu进程killed的问题

    2023-08-31 22:12:16
  • asp之家 网络编程 m.aspxhome.com