/ 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)