1// Copyright 2012 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package zip_test
6
7import (
8	"archive/zip"
9	"bytes"
10	"compress/flate"
11	"fmt"
12	"io"
13	"log"
14	"os"
15)
16
17func ExampleWriter() {
18	// Create a buffer to write our archive to.
19	buf := new(bytes.Buffer)
20
21	// Create a new zip archive.
22	w := zip.NewWriter(buf)
23
24	// Add some files to the archive.
25	var files = []struct {
26		Name, Body string
27	}{
28		{"readme.txt", "This archive contains some text files."},
29		{"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
30		{"todo.txt", "Get animal handling licence.\nWrite more examples."},
31	}
32	for _, file := range files {
33		f, err := w.Create(file.Name)
34		if err != nil {
35			log.Fatal(err)
36		}
37		_, err = f.Write([]byte(file.Body))
38		if err != nil {
39			log.Fatal(err)
40		}
41	}
42
43	// Make sure to check the error on Close.
44	err := w.Close()
45	if err != nil {
46		log.Fatal(err)
47	}
48}
49
50func ExampleReader() {
51	// Open a zip archive for reading.
52	r, err := zip.OpenReader("testdata/readme.zip")
53	if err != nil {
54		log.Fatal(err)
55	}
56	defer r.Close()
57
58	// Iterate through the files in the archive,
59	// printing some of their contents.
60	for _, f := range r.File {
61		fmt.Printf("Contents of %s:\n", f.Name)
62		rc, err := f.Open()
63		if err != nil {
64			log.Fatal(err)
65		}
66		_, err = io.CopyN(os.Stdout, rc, 68)
67		if err != nil {
68			log.Fatal(err)
69		}
70		rc.Close()
71		fmt.Println()
72	}
73	// Output:
74	// Contents of README:
75	// This is the source code repository for the Go programming language.
76}
77
78func ExampleWriter_RegisterCompressor() {
79	// Override the default Deflate compressor with a higher compression level.
80
81	// Create a buffer to write our archive to.
82	buf := new(bytes.Buffer)
83
84	// Create a new zip archive.
85	w := zip.NewWriter(buf)
86
87	// Register a custom Deflate compressor.
88	w.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) {
89		return flate.NewWriter(out, flate.BestCompression)
90	})
91
92	// Proceed to add files to w.
93}
94