最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

golang中zip压缩和解压文件

Golang 1431浏览 0评论

golang中压缩和解压文件可以使用标准库:archive/zip。

zip压缩文件

package main

import (
    "archive/zip"
    "bytes"
    "log"
    "os"
)

func main() {
    // 创建一个缓冲区用来保存压缩文件内容
    buf := new(bytes.Buffer)

    // 创建一个压缩文档
    w := zip.NewWriter(buf)

    // 将文件加入压缩文档
    var files = []struct {
        Name, Body string
    }{
        {"readme.txt", "This archive contains some text files."},
        {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
        {"todo.txt", "Get animal handling licence.\nWrite more examples."},
    }
    for _, file := range files {
        f, err := w.Create(file.Name)
        if err != nil {
            log.Fatal(err)
        }
        _, err = f.Write([]byte(file.Body))
        if err != nil {
            log.Fatal(err)
        }
    }

    // 关闭压缩文档
    err := w.Close()
    if err != nil {
        log.Fatal(err)
    }

    // 将压缩文档内容写入文件
    f, err := os.OpenFile("file.zip", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        log.Fatal(err)
    }
    buf.WriteTo(f)
}

这个示例来自官方文档,官方文档中并没有将压缩的内容写入到文件,所以一开始执行的时候什么都没有输出。后来看懂了程序,自己补上了写入文件的代码。

运行

$ go run zip.go

生成file.zip文件

golang中zip压缩文件

golang中zip压缩文件

zip解压文件

对上面的压缩文件解压一下:

package main

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

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

    // 迭代压缩文件中的文件,打印出文件中的内容
    for _, f := range r.File {
        fmt.Printf("文件名 %s:\n", f.Name)
        rc, err := f.Open()
        if err != nil {
            log.Fatal(err)
        }
        _, err = io.CopyN(os.Stdout, rc, int64(f.UncompressedSize64))
        if err != nil {
            log.Fatal(err)
        }
        rc.Close()
        fmt.Println()
    }

}

运行

$ go run unzip.go
文件名 readme.txt:
This archive contains some text files.
文件名 gopher.txt:
Gopher names:
George
Geoffrey
Gonzo
文件名 todo.txt:
Get animal handling licence.
Write more examples.

转载请注明:快乐编程 » golang中zip压缩和解压文件

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址