golang中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壓縮和解壓文件詳情的文章就介紹到這瞭,更多相關golang中tar壓縮和解壓文件內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!