Go 文件压缩解压

在Go语言中,archive/zip包提供了创建、读取和解压缩ZIP格式文件的功能。

一、创建ZIP文件并添加内容----压缩

package main

import (
	"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 main

import (
	"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("已成功提取所有文件")
}

 

相关推荐

  1. Go 文件压缩

    2024-06-07 02:54:03       30 阅读
  2. Python压缩文件

    2024-06-07 02:54:03       52 阅读
  3. Ubuntu 大压缩文件工具

    2024-06-07 02:54:03       39 阅读
  4. android文件压缩

    2024-06-07 02:54:03       41 阅读
  5. unity中压缩文件文件

    2024-06-07 02:54:03       32 阅读
  6. Linux 压缩

    2024-06-07 02:54:03       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 02:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 02:54:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 02:54:03       82 阅读
  4. Python语言-面向对象

    2024-06-07 02:54:03       91 阅读

热门阅读

  1. 2024-06-05 问AI: 介绍一下 SuperCLUE

    2024-06-07 02:54:03       38 阅读
  2. 海外金融牌照

    2024-06-07 02:54:03       29 阅读
  3. 我的创作纪念日

    2024-06-07 02:54:03       32 阅读
  4. 2024春季期中测验-入门组 补题报告

    2024-06-07 02:54:03       35 阅读
  5. 力扣2156.查找给定哈希值的子串

    2024-06-07 02:54:03       32 阅读
  6. 策略模式结合Spring使用

    2024-06-07 02:54:03       25 阅读
  7. Scala编程基础4 类、对象、继承、特质

    2024-06-07 02:54:03       28 阅读
  8. [React]用 flushSync 同步更新 state

    2024-06-07 02:54:03       31 阅读
  9. Sass 详解

    2024-06-07 02:54:03       24 阅读
  10. linux c socket编程里SO_REUSEADDR的作用

    2024-06-07 02:54:03       31 阅读