2019年第一篇博客

兜兜转转又回来更新go的博客了,今天来讲一下如何使用golang进行文件的读写

文件读写需要使用的包
  1. os
  2. ioutil
  3. bufio
  4. strings

文件读写总是少不了判断文件是否存在!

假如文件不存在就返回errorIsNotExist 判断 有 error说明文件不存在

show me your code?

// 判断文件是否存在
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		return err
	}

按行读文件

按行读取有两种方式 1 读取整个文件然后按照\n 分割,再循环读取 2 使用ioutil.ReadLine
func Readlines(filename string) {
	// go 按行读取文件的方式有两种,
	// 第一 将读取到的整个文件内容按照 \n 分割
	// 使用bufio
	// 第一种
	lines, err := ioutil.ReadFile(filename)

	if err != nil {
		fmt.Println(err)
	} else {
		contents := string(lines)
		lines := strings.Split(contents, "\n")
		for _, line := range lines {
			fmt.Println(line)
		}
	}
	// 第二种
	fd, err := os.Open(filename)
	defer fd.Close()
	if err != nil {
		fmt.Println("read error:", err)
	}
	buff := bufio.NewReader(fd)

	for {
		data, _, eof := buff.ReadLine()
		if eof == io.EOF {
			break
		}

		fmt.Println(string(data))
	}
}

写文件

os.Open方式是只读的方式打开的,这样无法写入也没有报错打开的方式为 os.O_RDWR|os.O_APPEND 这样才能使用写入,并且会追加写入
func WriterTXT(filename, content string) error {
	// 写入文件
	// 判断文件是否存在
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		return err
	}
	fd, err := os.OpenFile(filename, os.O_RDWR|os.O_APPEND, 0666)
	defer fd.Close()
	if err != nil {
		return err
	}
	w := bufio.NewWriter(fd)
	_, err2 := w.WriteString(content)
	if err2 != nil {
		return err2
	}
	w.Flush()
	fd.Sync()
	return nil
}

不要忘了close文件