go 文件操作
来源:原创
时间:2019-03-10
作者:脚本小站
分类:GoLang
写入内容到文件:
package main import ( "fmt" "os" ) func WriteFile(path string) { f, err := os.Create(path) if err != nil { fmt.Println("err = ", err) return } defer f.Close() var buf string buf = "1234demodeodke" n, err := f.WriteString(buf) if err != nil { fmt.Println("err = ", err) } fmt.Println(n) } func main() { var path = "./demo.txt" WriteFile(path) }
读取文件内容:
package main import ( "fmt" "io" "os" ) func WriteFile(path string) { f, err := os.Create(path) if err != nil { fmt.Println("err = ", err) return } defer f.Close() var buf string for i := 0; i < 10; i++ { buf = fmt.Sprintf("i = %d\n", i) // n 表示一次性写入内容的长度 n, err := f.WriteString(buf) if err != nil { fmt.Println("err = ", err) } fmt.Println(n) } } func ReadFile(path string) { f, err := os.Open(path) if err != nil { fmt.Println("err = ", err) } defer f.Close() buf := make([]byte, 1024*2) n, err := f.Read(buf) // n 表示读取内容的长度 // 没有错误且文件未结束 if err != nil && err != io.EOF { fmt.Println("err = ", err) } fmt.Println(string(buf[:n])) } func main() { var path = "./demo.txt" // WriteFile(path) ReadFile(path) }
按行读取文件:
package main import ( "bufio" "fmt" "io" "os" ) func ReadFileLine(path string) { f, err := os.Open(path) if err != nil { fmt.Println("err = ", err) return } defer f.Close() r := bufio.NewReader(f) // 新建一个缓冲区,把内容放入缓冲区中 for { buf, err := r.ReadBytes('\n') // 会把空格也一起读出来 if err != nil { if err == io.EOF { break } fmt.Println("err = ", err) } fmt.Println(string(buf)) } } func main() { var path = "./demo.txt" ReadFileLine(path) }
拷贝文件示例:
package main import ( // "bufio" "fmt" "io" "os" ) func main() { // 获取命令行参数 list := os.Args if len(list) != 3 { fmt.Println("usage: xxx src dest") return } src := list[1] dest := list[2] if src == dest { fmt.Println("文件名不能相同") return } srcfile, err1 := os.Open(src) if err1 != nil { fmt.Println("err = ", err1) return } destfile, err2 := os.Create(dest) if err2 != nil { fmt.Println("err = ", err2) return } defer srcfile.Close() defer destfile.Close() buf := make([]byte, 4*1024) //4k的缓冲区 for { n, err := srcfile.Read(buf) if err != nil { fmt.Println("err = ", err) if err == io.EOF { break } } destfile.Write(buf[:n]) } }