在Go語言中,archive/zip包提供了創建、讀取和解壓縮ZIP格式文件的功能。
一、創建ZIP文件并添加內容----壓縮
package mainimport ("archive/zip""bytes""fmt""io""log""os"
)func main() {// 創建一個緩沖區來存儲ZIP文件的內容buf := new(bytes.Buffer)// 創建一個新的ZIP文件zipWriter := zip.NewWriter(buf)// 添加文件到ZIP文件中addFileToZip(zipWriter, "file1.txt", []byte("向file1寫入內容"))addFileToZip(zipWriter, "file2.txt", []byte("向file2寫入內容"))// 關閉ZIP文件err := zipWriter.Close()if err != nil {log.Fatal(err)}// 將ZIP文件內容寫入磁盤file, err := os.Create("testFileZip.zip")if err != nil {log.Fatal(err)}defer file.Close()_, err = io.Copy(file, buf)if err != nil {log.Fatal(err)}fmt.Println("壓縮文件創建成功!")
}// 輔助函數,用于將字節數據作為文件添加到ZIP中
func addFileToZip(zipWriter *zip.Writer, fileName string, data []byte) error {header := &zip.FileHeader{Name: fileName,Method: zip.Deflate,}writer, err := zipWriter.CreateHeader(header)if err != nil {return err}_, err = writer.Write(data)return err
}
二、解壓縮ZIP文件----讀取并解壓縮一個ZIP文件
package mainimport ("archive/zip""fmt""io""log""os""path/filepath"
)func main() {//讀取zip壓縮文件reader, err := zip.OpenReader("testFileZip.zip")if err != nil {log.Fatal(err)}defer reader.Close()folder := "testFileZip"_, err = os.Stat(folder) // os.Stat 函數來獲取 folder 指定路徑的狀態信息。if err != nil && os.IsNotExist(err) { //判斷是否存在err = os.Mkdir(folder, os.ModePerm) //不存在就創建,os.ModePerm是Go語言中定義的默認權限,通常用于創建文件或目錄。if err != nil {log.Fatal(err)}}//提取壓縮文件for _, file := range reader.File {fmt.Println("提取到的文件有:", file.Name)// 創建目標文件的路徑targetPath := filepath.Join("testFileZip", file.Name)// 創建目標文件outputFile, err := os.Create(targetPath)if err != nil {log.Fatal(err)}defer outputFile.Close()// 讀取并解壓文件內容到目標文件fileReader, err := file.Open()if err != nil {log.Fatal(err)}defer fileReader.Close()_, err = io.Copy(outputFile, fileReader)if err != nil {log.Fatal(err)}}fmt.Println("已成功提取所有文件")
}
?