Home | History | Annotate | Download | only in zip
      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