ZIP压缩是一种广泛使用的压缩格式。通常使用场景是将文件集打包为ZIP格式,或者,将压缩文件解压缩。本文将展示如何使用标准库以编程方式处理ZIP文件。
读写ZIP文件
Golang 版本
1.12.1
前沿
ZIP压缩是一种广泛使用的压缩格式。通常使用场景是将文件集打包为ZIP格式,或者,将压缩文件解压缩。本文将展示如何使用标准库以编程方式处理ZIP文件。
实现
package main
import (
"archive/zip"
"bytes"
"fmt"
"io"
"io/ioutil"
"log"
"os"
)
func main() {
var buff bytes.Buffer
// 压缩内容
zipW := zip.NewWriter(&buff)
f, err := zipW.Create("newfile.txt")
if err != nil {
panic(err)
}
_, err = f.Write([]byte("This is my file content"))
if err != nil {
panic(err)
}
err = zipW.Close()
if err != nil {
panic(err)
}
// 将输出写入文件
err = ioutil.WriteFile("data.zip", buff.Bytes(), os.ModePerm)
if err != nil {
panic(err)
}
// 解压缩内容
zipR, err := zip.OpenReader("data.zip")
if err != nil {
panic(err)
}
for _, file := range zipR.File {
fmt.Println("File " + file.Name + " contains:")
r, err := file.Open()
if err != nil {
log.Fatal(err)
}
_, err = io.Copy(os.Stdout, r)
if err != nil {
panic(err)
}
err = r.Close()
if err != nil {
panic(err)
}
fmt.Println()
}
}
$ go run main.go
File newfile.txt contains:
This is my file content
原理
内置包zip
包含NewWriter
和NewReader
函数,用于创建zip.Writer
以进行压缩,zip.Reader
用于解压缩。
ZIP文件的每个记录都是使用zip.Writer
的Create
方法创建的。 然后返回Writer
编写内容正文。
要解压缩文件,OpenReader
函数用于创建压缩文件中记录的ReadCloser
。 创建的ReaderCloser
的File
字段是zip.File
指针的一部分。 通过调用Open
方法并读取返回的ReadCloser
来获取文件的内容。
可以通过
Create
方法中添加斜杠来创建文件夹。 例如folder/newfile.txt
。