golang 标准库 解压

发布时间:2024-07-05 01:33:47

解压是一项常见且必要的操作,用于将压缩文件解压缩成原始的文件或目录。在Golang标准库中,我们可以利用archive/zip和compress/gzip包来实现解压操作。

使用archive/zip解压zip文件

首先我们先导入archive/zip包,并创建一个.zip文件的读取器。

import (
    "archive/zip"
    "fmt"
    "os"
)

func main() {
    // 打开一个zip文件
    r, err := zip.OpenReader("file.zip")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer r.Close()

    // 遍历zip文件中的所有文件和目录
    for _, f := range r.File {
        // 如果是目录,则创建对应的目录
        if f.FileInfo().IsDir() {
            os.MkdirAll(f.Name, f.Mode())
            continue 
        }

        // 如果是文件,则创建对应的文件并解压数据
        rc, err := f.Open()
        if err != nil {
            fmt.Println(err)
            return
        }
        defer rc.Close()

        // 创建一个新文件
        newFile, err := os.Create(f.Name)
        if err != nil {
            fmt.Println(err)
            return
        }
        defer newFile.Close()

        // 将zip文件中的数据解压到新文件中
        _, err = io.Copy(newFile, rc)
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Println("解压成功:", f.Name)
    }
}

我们首先使用zip.OpenReader函数打开一个.zip文件,并得到一个读取器r。然后,我们通过遍历读取器中的所有文件和目录,逐个进行解压操作。如果当前项是目录,则我们使用os.MkdirAll函数创建对应的目录;如果是文件,则打开该文件,并创建一个新的文件newFile。接着,我们使用io.Copy函数将读取到的数据拷贝到新创建的文件中,实现解压操作。最后,我们使用fmt.Println函数输出解压成功的文件名。

使用compress/gzip解压gzip文件

接下来,我们来看一下如何使用compress/gzip包来解压gzip文件。

import (
    "compress/gzip"
    "fmt"
    "io"
    "os"
)

func main() {
    // 打开一个gzip文件
    f, err := os.Open("file.gz")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    // 创建一个gzip.Reader
    r, err := gzip.NewReader(f)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer r.Close()

    // 创建一个新文件
    newFile, err := os.Create("file")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer newFile.Close()

    // 将gzip文件的数据解压到新文件中
    _, err = io.Copy(newFile, r)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println("解压成功")
}

我们首先使用os.Open函数打开一个gzip文件,并得到一个文件指针f。然后,我们使用gzip.NewReader函数创建一个gzip.Reader,并传入文件指针f。接着,我们创建一个新文件newFile,并使用io.Copy函数将gzip.Reader中的数据拷贝到新创建的文件中,实现解压操作。最后,我们使用fmt.Println函数输出解压成功的提示信息。

总结

通过使用archive/zip和compress/gzip包,我们可以方便地实现zip文件和gzip文件的解压操作。在解压zip文件时,我们可以使用zip.OpenReader函数打开一个.zip文件,并得到一个读取器,然后通过遍历读取器中的文件和目录,逐个进行解压操作。在解压gzip文件时,我们可以使用os.Open函数打开一个gzip文件,并得到一个文件指针,然后使用gzip.NewReader函数创建一个gzip.Reader,再创建一个新文件,并通过io.Copy函数将gzip.Reader中的数据拷贝到新文件中,实现解压操作。解压操作可以让我们方便地获取压缩文件中的原始文件或目录,提高了开发效率。

相关推荐