go语言文件操作应用 go周末班学习

    /    2019-04-30

文件操作应用

一、从一个文件拷贝到另一个文件。

package main

import (
    "fmt"
    "io"
    "os"
)

func CopyFile(dstName, srcName string) (writeen int64, err error) {
    src, err := os.Open(dstName)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer src.Close()

    dst, err := os.OpenFile(srcName, os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer dst.Close()

    return io.Copy(dst, src)
}

func main() {
    CopyFile("./oldboy/golang.go""./oldboy/golang_copy.go")
    fmt.Println("copy done.")
}

二、写入内容到Excel。

使用 encoding/csv 包实现写入内容到Excel。

csv读写逗号分隔值(csv)的文件。

一个csv分拣包含零到多条记录,每条记录一到多个字段。每个记录用换行符分隔。最后一条记录后面可以有换行符,也可以没有。

写入内容到Excel常用函数和方法:

func NewWriter(w io.Writer) *Writer

NewWriter返回一个写入w的*Writer。

func (w *Writer) Write(record []string) (err error)

向w中写入一条记录,会自行添加必需的引号。记录是字符串切片,每个字符串代表一个字段。

func (w *Writer) Flush()

将缓存中的数据写入底层的io.Writer。要检查Flush时是否发生错误的话,应调用Error方法。

func (w *Writer) WriteAll(records [][]string) (err error)

WriteAll方法使用Write方法向w写入多条记录,并在最后调用Flush方法清空缓存。

代码实现:

package main

import (
    "encoding/csv"
    "math/rand"
    "os"
    "strconv"
)

func main() {
    file, err := os.Create("./oldboy.xls")
    if err != nil {
        panic(err)
    }
    defer func(file *os.File) { file.Close() }(file)

    file.WriteString("\xEF\xBB\xBF"// 写入UTF-8 BOM

    w := csv.NewWriter(file)
    w.Write([]string{"编号""姓名""年龄"})
    for i := 1; i < 11; i++ {
        num := strconv.FormatInt(int64(i), 10)
        age := strconv.FormatInt(int64(rand.Intn(100)), 10)
        w.Write([]string{num, "name" + num, age})
    }

    w.Flush()

    records := [][]string{}
    for i := 11; i < 21; i++ {
        num := strconv.FormatInt(int64(i), 10)
        age := strconv.FormatInt(int64(rand.Intn(100)), 10)
        str := []string{num, "name" + num, age}
        records = append(records, str)
    }
    w.WriteAll(records)
}


(0)

分享至