欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓

 更新時間:2023年08月16日 08:19:19   作者:路多辛  
Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來非常方便,下面就跟隨小編一起了解一下具體使用方法吧

實現(xiàn)壓縮功能

1、首先需要創(chuàng)建一個 zip 文件。

zip 文件也是一個文件,首先需要創(chuàng)建一個基礎(chǔ)的 zip 文件,使用 os.Create() 函數(shù)創(chuàng)建即可。

package main
import "os"
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
}

2、使用 zip.NewWriter() 函數(shù)創(chuàng)建一個新的 *Writer 對象,用于將待壓縮的文件寫入到 zip 文件。

package main
import (
    "archive/zip"
    "os"
)
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
    //第二步,創(chuàng)建一個新的 *Writer 對象
    zipWriter := zip.NewWriter(zipFile)
}

3、向 zip 文件中添加第一個文件

創(chuàng)建完 zip writer 后,向 zip 文件中添加一個文件

package main
import (
    "archive/zip"
    "io"
    "os"
)
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
    //第二步,創(chuàng)建一個新的 *Writer 對象
    zipWriter := zip.NewWriter(zipFile)
    //第三步,向 zip 文件中添加第一個文件
    //
    //向 zip 文件中添加一個文件,返回一個待壓縮的文件內(nèi)容應(yīng)寫入的 Writer
    w, err := zipWriter.Create("json.go")
    if err != nil {
        panic(err)
    }
    // 打開待壓縮的文件
    f, err := os.Open("bec/json.go")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    //需要壓縮更多文件到壓縮包的話,只需要重復(fù)第三步即可,只需要更換下文件名
    if _, err := io.Copy(w, f); err != nil {
        panic(err)
    }
}

4、關(guān)閉 zip writer,將所有數(shù)據(jù)寫入指向基礎(chǔ) zip 文件的數(shù)據(jù)流

package main
import (
    "archive/zip"
    "io"
    "os"
)
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
    //第二步,創(chuàng)建一個新的 *Writer 對象
    zipWriter := zip.NewWriter(zipFile)
    //第三步,向 zip 文件中添加第一個文件
    //
    //向 zip 文件中添加一個文件,返回一個待壓縮的文件內(nèi)容應(yīng)寫入的 Writer
    w, err := zipWriter.Create("json.go")
    if err != nil {
        panic(err)
    }
    // 打開待壓縮的文件
    f, err := os.Open("bec/json.go")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    //需要壓縮更多文件到壓縮包的話,只需要重復(fù)第三步即可,只需要更換下文件名
    if _, err := io.Copy(w, f); err != nil {
        panic(err)
    }
    // 第四步,關(guān)閉 zip writer,將所有數(shù)據(jù)寫入指向基礎(chǔ) zip 文件的數(shù)據(jù)流
    zipWriter.Close()
}

解壓 ZIP 包

1、 使用 zip.OpenReader 打開 zip 包

package main
import (
    "archive/zip"
)
func main() {
    // 第一步,打開 zip 文件
    zipFile, err := zip.OpenReader("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
}

2、 遍歷 zip 中的文件,將壓縮包的中的文件讀取到本地文件

package main
import (
	"archive/zip"
	"io"
	"os"
	"path/filepath"
)
func main() {
	// 第一步,打開 zip 文件
	zipFile, err := zip.OpenReader("archive.zip")
	if err != nil {
		panic(err)
	}
	defer zipFile.Close()
	// 第二步,遍歷 zip 中的文件
	for _, f := range zipFile.File {
		filePath := f.Name
		if f.FileInfo().IsDir() {
			_ = os.MkdirAll(filePath, os.ModePerm)
			continue
		}
    // 創(chuàng)建對應(yīng)文件夾
		if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
			panic(err)
		}
    // 解壓到的目標(biāo)文件
		dstFile, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
		if err != nil {
			panic(err)
		}
		file, err := f.Open()
		if err != nil {
			panic(err)
		}
    // 寫入到解壓到的目標(biāo)文件
		if _, err := io.Copy(dstFile, file); err != nil {
			panic(err)
		}
		dstFile.Close()
		file.Close()
	}
}

到此這篇關(guān)于Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓的文章就介紹到這了,更多相關(guān)Go ZIP壓縮與解壓內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go1.21新增內(nèi)置函數(shù)(built-in?functions)詳解

    Go1.21新增內(nèi)置函數(shù)(built-in?functions)詳解

    Go?1.21新增的內(nèi)置函數(shù)分別是?min、max?和?clear,這篇文章主要帶大家一起了解一下這幾個函數(shù)的用途和使用示例,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • 使用Go創(chuàng)建一個TCP服務(wù)器的操作步驟

    使用Go創(chuàng)建一個TCP服務(wù)器的操作步驟

    在網(wǎng)絡(luò)編程中,TCP?是最常見的傳輸協(xié)議之一,Go?提供了?net?包,可以方便地實現(xiàn)?TCP?服務(wù)器與客戶端通信,本篇將以實戰(zhàn)形式演示如何用?Go?創(chuàng)建一個?TCP?服務(wù)器,并讓多個客戶端與之通信,需要的朋友可以參考下
    2025-08-08
  • Go語言字符串基礎(chǔ)示例詳解

    Go語言字符串基礎(chǔ)示例詳解

    這篇文章主要為大家介紹了Go語言字符串基礎(chǔ)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • go語言題解LeetCode674最長連續(xù)遞增序列

    go語言題解LeetCode674最長連續(xù)遞增序列

    這篇文章主要為大家介紹了go語言題解LeetCode674最長連續(xù)遞增序列示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Go語言排序與接口實例分析

    Go語言排序與接口實例分析

    這篇文章主要介紹了Go語言排序與接口,實例分析了排序與接口的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 使用Go語言判斷二叉樹是否對稱的方法小結(jié)

    使用Go語言判斷二叉樹是否對稱的方法小結(jié)

    二叉樹Binary Tree一種特殊的樹,是結(jié)點的一個有限集合,且所有結(jié)點最多有2個子結(jié)點,即度只能是0,1,2,判斷二叉樹是否對稱需比較左右子樹結(jié)構(gòu)與值,遞歸法直接對比子節(jié)點,迭代法用隊列模擬遞歸,本文通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • Golang::slice和nil的對比分析

    Golang::slice和nil的對比分析

    這篇文章主要介紹了Golang::slice和nil的對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go Gin 處理跨域問題解決

    Go Gin 處理跨域問題解決

    在前后端分離的項目中,經(jīng)常會遇到跨域問題,本文主要介紹了Go Gin 處理跨域問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Golang實現(xiàn)微信公眾號后臺接入的示例代碼

    Golang實現(xiàn)微信公眾號后臺接入的示例代碼

    這篇文章主要介紹了Golang實現(xiàn)微信公眾號后臺接入的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 一文詳解Golang協(xié)程調(diào)度器scheduler

    一文詳解Golang協(xié)程調(diào)度器scheduler

    這篇文章主要介紹了一文詳解Golang協(xié)程調(diào)度器scheduler,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07

最新評論