首页后端开发其他后端知识Golang中tar怎样实现解压和压缩文件的

Golang中tar怎样实现解压和压缩文件的

时间2024-03-26 13:54:03发布访客分类其他后端知识浏览1529
导读:这篇文章给大家介绍了“Golang中tar怎样实现解压和压缩文件的”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“Golang中tar怎样实现解压和压缩文件的”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小...
这篇文章给大家介绍了“Golang中tar怎样实现解压和压缩文件的”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“Golang中tar怎样实现解压和压缩文件的”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

目录
  • 1、压缩并输出tar.gz文档
  • 2、tar解压缩

查看官方文档,官方自带的演示:

// 官方演示
package main
 
import (
    "archive/tar"
    "bytes"
    "fmt"
    "io"
    "log"
    "os"
)
 
func main() {
    
    // 将若干文件写入压缩文档
    // 这边源文件是直接写在代码里哈,然后也没有输出一个文档
    // 后面会演示源文件进行压缩,然后输出一个tar.gz的压缩文档
    var buf bytes.Buffer
    tw := tar.NewWriter(&
buf)
    var files = []struct {

        Name, Body string
    }
{

        {
"readme.txt", "This archive contains some text files."}
,
        {
"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"}
,
        {
"todo.txt", "Get animal handling license."}
,
    }

    for _, file := range files {
    
        hdr := &
tar.Header{

            Name: file.Name,
            Mode: 0600,
            Size: int64(len(file.Body)),
        }
    
        if err := tw.WriteHeader(hdr);
 err != nil {

            log.Fatal(err)
        }
    
        if _, err := tw.Write([]byte(file.Body));
 err != nil {

            log.Fatal(err)
        }

    }
    
    if err := tw.Close();
 err != nil {

        log.Fatal(err)
    }
    
 
    // 上面压缩了之后,压缩内容都存储在buf这个变量里
    // 这边遍历输出一下即可
    tr := tar.NewReader(&
buf)
    for {

        hdr, err := tr.Next()
        if err == io.EOF {

            break // 文件已经遍历完成了
        }

        if err != nil {

            log.Fatal(err)
        }
    
        fmt.Printf("%s的文件内容: ", hdr.Name)
        if _, err := io.Copy(os.Stdout, tr);
 err != nil {

            log.Fatal(err)
        }

        fmt.Println()
    }

 
}



1、压缩并输出tar.gz文档

官方的演示中并未将压缩的内容输出文档,实际使用中经常会用到。这边可用os库中的文件操作,将压缩内容写入文档,参考

代码如下:

// tar压缩
// 这边演示一下从源文件进行压缩,然后输出一个tar.gz文档
// 作者:陈杰斌
// 参考地址:http://www.01happy.com/golang-tar/
package main
 
import (
    "archive/tar"
    "bytes"
    "log"
    "os"
)
 
func main() {
    
    // 创建一个缓冲区用来保存压缩文件内容
    var buf bytes.Buffer
    // 创建一个压缩文档
    tw := tar.NewWriter(&
buf)
 
    // 定义一堆文件
    // 将文件写入到压缩文档tw
    var files = []struct {

        Name, Body string
    }
{

        {
"readme.txt", "This archive contains some text files."}
,
        {
"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"}
,
        {
"todo.txt", "Get animal handling license."}
,
    }

    for _, file := range files {
    
        hdr := &
tar.Header{

            Name: file.Name,
            Mode: 0600,
            Size: int64(len(file.Body)),
        }
    
        if err := tw.WriteHeader(hdr);
 err != nil {

            log.Fatal(err)
        }
    
        if _, err := tw.Write([]byte(file.Body));
 err != nil {

            log.Fatal(err)
        }

    }
    
    if err := tw.Close();
 err != nil {

        log.Fatal(err)
    }

 
    // 将压缩文档内容写入文件 file.tar.gz
    f, err := os.OpenFile("file.tar.gz", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {

        log.Fatal(err)
    }

    buf.WriteTo(f)
}
    


执行一下哈:

>
 go run compress.go 


golang中tar压缩:

2、tar解压缩

同上,可以使用os库将文档内容读入

// tar解压缩演示
// 这边演示一下从源文件进行解压,然后输出文件内容
// 作者:陈杰斌
// 参考地址:http://www.01happy.com/golang-tar/
package main
 
import (
    "archive/tar"
    "fmt"
    "io"
    "log"
    "os"
)
 
func main() {

    // 解压需要使用tar.NewReader方法, 这个方法接收一个io.Reader对象
    // 那边怎么从源文件得到io.Reader对象呢?
    // 这边通过os.Open打开文件,会得到一个os.File对象,
    // 因为他实现了io.Reader的Read方法,所有可以直接传递给tar.NewReader
    file, err := os.Open("file.tar.gz")
    if err != nil {

        log.Fatalln(err)
    }

    defer file.Close()
 
    // tar对象读取文件内容, 遍历输出文件内容
    tr := tar.NewReader(file)
    for {

        hdr, err := tr.Next()
        if err == io.EOF {

            break // End of archive
        }

        if err != nil {

            log.Fatal(err)
        }
    
        fmt.Printf("%s文件内容:\n", hdr.Name)
        if _, err := io.Copy(os.Stdout, tr);
 err != nil {

            log.Fatal(err)
        }

        fmt.Println()
    }

}
    


执行一下:

 >
     go run decompress.go  




到此这篇关于“Golang中tar怎样实现解压和压缩文件的”的文章就介绍到这了,感谢各位的阅读,更多相关Golang中tar怎样实现解压和压缩文件的内容,欢迎关注网络资讯频道,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Golang中tar怎样实现解压和压缩文件的
本文地址: https://pptw.com/jishu/653542.html
React中为什么需要Memoization,怎么用 PHP中强制类型转换怎样实现?一文带你看懂

游客 回复需填写必要信息