Go语言文件操作

Posted gyyyl

tags:

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

1、使用os包读取文件的内容

// 自定义每次读取数据长度
func ReadFileFromOS() {
	file, err := os.Open("./abc")
	if err != nil {
		fmt.Printf("open file fail,err: %+v
", err)
		return
	}
	// 关闭文件
	defer file.Close()
	// 定义一个长度为10的切片
	b := make([]byte, 10)
	for {
		n, err := file.Read(b)
		// _, err := file.Read(b)
		if err == io.EOF {
			// EOF表示end of file,文件读取完毕
			return
		}
		if err != nil {
			fmt.Printf("read file fail,err: %+v
", err)
			return
		}
		// 打印读出的内容
		// 将切片转化为string,然后打印
		fmt.Printf("读取字节数:%d
", n)
		fmt.Print(string(b))
	}
}

  在方法file.Read(b)中,入口参数是一个切片,切片的长度就是每次从文件中读取数据打长度,当文件中剩余内容小于这个切片的长度的时候,就读文件的剩下的内容,而不是切片的长度那样多的内容。当文件读到最后的时候,file.Read()返回一个文件结束信息,io.EOF

2、使用bufio包读取文件内容

  bufio也是一个可以用来读取文件的包

// 使用bufio包读文件
func ReadFileFromBufio() {
	file, err := os.Open("./abc")
	if err != nil {
		fmt.Printf("open file fail,err: %+v
", err)
		return
	}
	// 关闭文件
	defer file.Close()
	newReader := bufio.NewReader(file)
	for {
		// 使用函数ReadString(‘
‘)表示每次读取一个字符串,遇到‘
‘表示读取当前字符串结束
		line, err := newReader.ReadString(‘
‘)
		if err == io.EOF {
			return
		}
		if err != nil {
			fmt.Printf("read file fail,err: %+v
", err)
		}
		fmt.Print(line)
	}
}

  使用这种方法就是创建一个Reader变量,用来读取文件内容,Reader包含的方法包括ReadLine,ReadString等等,同样的读到文件最后会返回文件结束符io.EOF

3、使用io/ioutil包一次性读取文件内容,这个方法比较简单

// 使用io/ioutil包读取文件内容
func ReadFileFromIOutil() {
	// content是一个byte类型的切片
	content, err := ioutil.ReadFile("./abc")
	if err != nil {
		fmt.Printf("read file fail,err: %+v", err)
		return
	}
	fmt.Println(string(content))
}

  它可以一次性读取文件的所有内容,而不需要使用循环来读取

以上是关于Go语言文件操作的主要内容,如果未能解决你的问题,请参考以下文章

go语言-关于文件的操作和解释

超赞的 Go 语言 INI 文件操作

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

Day05 Go语言文件操作,结构体,构造函数,方法接收器,json序列化

go 语言的一个赋值操作

Go语言文件操作