go语言使用pkg的archive的包的练习
src.go
package archive_tar
import (
"archive/tar"
"archive/zip"
"fmt"
"io"
"os"
)
type files struct {
name, content string
}
//写测试
func TarWriteTest() {
//
files_ := [2]files{
{"a.txt", "hello world"},
{"b.txt", "你好,世界,有很多的文字,很多很多很多,超过了1k那么多,你该怎么办"},
}
//
tarf, _ := os.Create("xxx.tar")
defer tarf.Close()
tarBufWr := tar.NewWriter(tarf)
//
for _, v := range files_ {
var hdr tar.Header
hdr.Name = v.name
hdr.Size = int64(len(v.content))
hdr.Mode = 0600
//写文件头
tarBufWr.WriteHeader(&hdr)
//写内容
tarBufWr.Write([]byte(v.content))
//
} //
tarBufWr.Close()
}
//读测试
func TarReadTest() {
//
tarf, _ := os.Open("xxx.tar")
defer tarf.Close()
//
tarRd := tar.NewReader(tarf)
for {
hdr, err := tarRd.Next()
if err == io.EOF {
break
} //
fmt.Println(hdr.Size)
io.Copy(os.Stdout, tarRd)
}
}
//写zip文件
func ZipWrite() {
//构造文件
sampfiles := [3]files{
{"a.txt", "hello world\r\n"},
{"b.txt", "你好,世界,有很多的文字,很多很多很多,超过了1k那么多,你该怎么办\r\n"},
{"c.txt", "你好,世界,有很多的文字,很多很多很多,超过了1k那么多,你该怎么办\r\n"},
}
//
f_, _ := os.Create("xxx.zip")
defer f_.Close()
//
zipWr := zip.NewWriter(f_)
//
for _, v := range sampfiles {
//写文件
zipf, _ := zipWr.Create(v.name)
zipf.Write([]byte(v.content))
}
//必须有
defer zipWr.Close()
}
//读取zip文件
func ZipRead() {
//
zipRd, _ := zip.OpenReader("xxx.zip")
//遍历文件,获取zip文件内容
for _, v := range zipRd.File {
fmt.Println(v.FileHeader.Name)
f_, _ := v.Open()
io.Copy(os.Stdout, f_)
}
}
// func main() {
// tarReadTest()
// fmt.Println("end")
// }
src_test.go
package archive_tar
import (
"fmt"
"testing"
)
func TestTarReadTest(t *testing.T) {
TarReadTest()
}
func TestTarWriteTest(t *testing.T) {
fmt.Println("将会看到xxx.tar文件")
TarWriteTest()
}
func TestZipRead(t *testing.T) {
ZipRead()
}
func TestZipWrite(t *testing.T) {
ZipWrite()
}
测试命令
go test -run ^TestZipRead$ .