GO 文件读取常用的方法

Posted 1994jinnan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO 文件读取常用的方法相关的知识,希望对你有一定的参考价值。

方式1: 一行一行的方式读取

其中常用的方法就有:ReadString,ReadLine,ReadBytes

  • ReadLine 返回单个行,不包括行尾字节,就是说,返回的内容不包括 或者 ,返回的类型为[]byte
  • ReadString(‘ ‘) 以分隔字符方式读取,遇到传入的分割字符时就返回结果,返回的结果包含分隔字符本身,返回的类型为string,比如传入 ,代码遇到 字符就返回,而文件行尾都是以 结尾,所以ReadString(‘ ‘)就实现了分行读取
  • ReadBytes(‘ ‘) 和ReadString方法差不多,只是结果以[]byte类型返回数据

** 文件读取需要注意点:**

  • 记得处理完后关闭文件,以防止内存泄露,占用操作系统文件句柄数
  • 文件读取结束后返回的err类型是io.EOF,可以使用这个来跳出循环

方式一源码例子:

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func main() {
	// 读取一个文件的内容
	file, err := os.Open("./abc.txt")
	if err != nil {
		fmt.Println("open file err:", err.Error())
		return
	}

	// 处理结束后关闭文件
	defer file.Close()

	// 使用bufio读取
	r := bufio.NewReader(file)

	for {
		// 分行读取文件  ReadLine返回单个行,不包括行尾字节(
  或 
)
		//data, _, err := r.ReadLine()

		// 以分隔符形式读取,比如此处设置的分割符是
,则遇到
就返回,且包括
本身 直接返回字符串
		//str, err := r.ReadString(‘
‘)

		// 以分隔符形式读取,比如此处设置的分割符是
,则遇到
就返回,且包括
本身 直接返回字节数数组
		data, err := r.ReadBytes(‘
‘)

		// 读取到末尾退出
		if err == io.EOF {
			break
		}

		if err != nil {
			fmt.Println("read err", err.Error())
			break
		}

		// 打印出内容
		fmt.Printf("%v", string(data))
	}
}

方式2: 一次性读取

一次性读取适合读取内容比较小的文件,大文件读取建议使用第一种方式

一次性读取可以使用ioutil.ReadFile方法,次方法不需要关闭文件,源码例子如下:

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	// 使用ioutil一次性读取文件
	data, err := ioutil.ReadFile("./abc.txt")
	if err != nil {
		fmt.Println("read file err:", err.Error())
		return
	}

	// 打印文件内容
	fmt.Println(string(data))
}

以上是关于GO 文件读取常用的方法的主要内容,如果未能解决你的问题,请参考以下文章

Go语言文件写入

常用python日期日志获取内容循环的代码片段

Go_18: Golang 中三种读取文件发放性能对比

Go -- 读取文件内容

从读取 .go 文件中反思结构类型

python csv读取方法及常用的csv读取代码