技术文摘
Golang 文件压缩与解压缩示例代码
2024-12-28 22:45:29 小编
Golang 文件压缩与解压缩示例代码
在 Go 语言中,实现文件的压缩与解压缩是一项常见且实用的任务。下面将为您展示如何使用 Go 语言来完成这一操作,并提供相关的示例代码。
我们需要导入一些必要的包,例如 archive/zip 和 io 等。
import (
"archive/zip"
"fmt"
"io"
"os"
)
接下来,让我们看一下文件压缩的代码实现。
func CompressFiles(files []string, outputFile string) error {
// 创建一个新的 ZIP 文件
outFile, err := os.Create(outputFile)
if err!= nil {
return err
}
defer outFile.Close()
// 创建一个 ZIP 写入器
zipWriter := zip.NewWriter(outFile)
defer zipWriter.Close()
for _, file := range files {
// 打开要压缩的文件
inFile, err := os.Open(file)
if err!= nil {
return err
}
defer inFile.Close()
// 获取文件信息
info, err := inFile.Stat()
if err!= nil {
return err
}
// 创建一个新的文件头
header, err := zip.FileInfoHeader(info)
if err!= nil {
return err
}
// 写入文件头
writer, err := zipWriter.CreateHeader(header)
if err!= nil {
return err
}
// 复制文件内容到 ZIP 中
_, err = io.Copy(writer, inFile)
if err!= nil {
return err
}
}
return nil
}
上述代码定义了一个 CompressFiles 函数,它接受要压缩的文件列表和输出的 ZIP 文件路径作为参数。通过一系列的操作,将文件逐个压缩到指定的 ZIP 文件中。
然后是文件解压缩的实现。
func DecompressFile(zipFile, outputDir string) error {
// 打开 ZIP 文件
reader, err := zip.OpenReader(zipFile)
if err!= nil {
return err
}
defer reader.Close()
for _, file := range reader.File {
// 打开解压后的文件
outFile, err := os.Create(outputDir + file.Name)
if err!= nil {
return err
}
defer outFile.Close()
// 读取压缩文件内容
inReader, err := file.Open()
if err!= nil {
return err
}
defer inReader.Close()
// 复制内容到解压后的文件
_, err = io.Copy(outFile, inReader)
if err!= nil {
return err
}
}
return nil
}
在 DecompressFile 函数中,我们打开 ZIP 文件,遍历其中的每个文件,创建对应的解压后的文件,并将内容复制过去。
通过以上的示例代码,您可以在 Go 语言中轻松实现文件的压缩与解压缩功能。这在处理文件存储和传输时非常有用,能够有效地节省存储空间和提高传输效率。
希望上述的示例代码和讲解对您在使用 Go 语言进行文件操作时有所帮助。
- 共话 Netty 核心模块
- 转转中对比学习算法的实践应用
- Go 大佬或将为 Map 新增清除功能?
- Rollup 打包:从入门到实践,你掌握多少?
- 数据结构之字典树 Trie:一字联想多词
- 因绩效,10 行代码我扩至 500 行
- Julia 独一无二的成因何在
- Java 程序员必知的 Synchronized 底层原理解析
- Go 已有协程,GoFrame 为何还要弄协程池?如何及何时使用?
- 携程度假零成本微前端架构之零界
- Python 编程:深入探究字典的链式映射(ChainMap)
- 消息中间件系列之传输及消费模式解析
- SDK 体积及性能优化实践
- AI 绘画逆火出圈,敢不敢发自拍让 AI 用文字描绘你?
- 全面解读 DataLeap 中的 Notebook