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 5 package zip_test 6 7 import ( 8 "archive/zip" 9 "bytes" 10 "compress/flate" 11 "fmt" 12 "io" 13 "log" 14 "os" 15 ) 16 17 func 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 50 func 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 78 func 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