Go语言文件操作

2021-02-05 18:17

阅读:616

标签:for   ret   return   文件   读取   字符   file   fail   def   

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

// 自定义每次读取数据长度
func ReadFileFromOS() {
	file, err := os.Open("./abc")
	if err != nil {
		fmt.Printf("open file fail,err: %+v\n", 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\n", err)
			return
		}
		// 打印读出的内容
		// 将切片转化为string,然后打印
		fmt.Printf("读取字节数:%d\n", 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\n", err)
		return
	}
	// 关闭文件
	defer file.Close()
	newReader := bufio.NewReader(file)
	for {
		// 使用函数ReadString(‘\n‘)表示每次读取一个字符串,遇到‘\n‘表示读取当前字符串结束
		line, err := newReader.ReadString(‘\n‘)
		if err == io.EOF {
			return
		}
		if err != nil {
			fmt.Printf("read file fail,err: %+v\n", 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\b", err)
		return
	}
	fmt.Println(string(content))
}

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

Go语言文件操作

标签:for   ret   return   文件   读取   字符   file   fail   def   

原文地址:https://www.cnblogs.com/gyyyl/p/12786721.html


评论


亲,登录后才可以留言!