• 压缩文件和解压文件


    压缩文件:

    复制代码代码如下:
    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")
    }
  • 相关阅读:
    centos7 yum安装配置Lnmp和负载配置
    Linux搭建lamp(Apache+PHP+Mysql环境)centos7.2版详细教程
    php的移位符运算
    Mysql的注入与防御
    介绍10个非常有用的PHP函数
    PHP性能的分析
    Netty 4源码解析:服务端启动
    centOS6.6升级gcc4.8
    kafka 0.8.x producer Example(scala)
    spark standalone zookeeper HA部署方式
  • 原文地址:https://www.cnblogs.com/craneboos/p/8440426.html
Copyright © 2020-2023  润新知