go按行读写文件

2019年第一篇博客

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

文件读写需要使用的包

  1. os
  2. ioutil
  3. bufio
  4. strings

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

go里面使用os.Stat 和 os.IsNotExist 相结合来判断文件是否存在
os.Stat 是用来获取文件的相关信息的,比如文件大小,最近一次修改时间等,但是假如文件不存在就返回error
我们就需要这个error 然后IsNotExist 判断 有 error说明文件不存在

show me your code?

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

按行读文件

这里我使用了ioutil.ReadFile() 需要注意的是这个返回的是[]byte 类型的,需要转为string 才是我们可读的样子
按行读取有两种方式 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.OpenFile 指定打开的方式为 os.O_RDWR|os.O_APPEND 这样才能使用写入,并且会追加写入,只使用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文件

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lucky404/article/details/86302564