写入内容到文件:

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])
	}
}