开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:带缓冲的 Reader 读文件】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9727
带缓冲的 Reader 读文件
内容介绍
一、简介
二、代码实现
一、简介
读取文件的内容并显示在终端(现在主要使用的是带缓冲区的方式,往往可以提高效率,特别适合读取比较大的文件),在这里会使用 os:Open,file:Close,bufio:NewReader():reader.ReadString
等函数和方法。
打开文件,第一个案例,读取文件操作应用实例。
D:woproject\src\go_code>go run test.9o
package main
import
fnt
"bufio"
"io"
Func main
file. err := os.Open<"C:/ny.txt")
if err
fnt.PrintInC'opon
return
二、代码实现
新建文件夹 file,建立包,打开文件:
package main
import
"fmt"
"os"
func main()
//打开文件
//概念说明:file 的叫法
//1. file 叫 file对象
//2. file 叫 file指针
//3.file 叫 file 文件句柄
file,err:=os.Open("d:/test.txt") if err l= nil t
fmt.Println("open file err=",err)
//当函数退出时,要及时的关闭file
defer file.close()
//要及时关闭 file 句柄,否则句柄会有内存泄漏.
在bifio包里,有一个函数,查看 reader 源代码,
//创建一个 Reader 是带缓冲的
type Reader struct//reader 结构体,里面会缓冲,默认大小为4096
buf[]byte
rd io.Reader // reader provided by the client
r, wint //buf read and write positions
err error
lastByte int
lastRuneSize int
const
defaultBufsize = 4096
//默认的缓冲区为4096个字节
reader := bufio.NewReader(file)
如果有缓冲,好处是:它并不是一次性的读完内存,而是读一部分处理一部分,这样可以处理大的文件,有了 reader,此时可以循环读取文件内容。
//循环的读取文件的内容
for
//既然是读取那就是for循环
reader . Readstring('\n')
//通过 reader 去读取文件的内容,读到一个换行就结束。\n代表换行符。
//读的时候会返回两个结果:str 和 err,读取的内容会放在str变量,把错误信息放在err变量。
此时做出判断:
if err == nil
//表示出错
if err == io.EOF // io. EOF
表示文件的末尾
break/
/结束读取
//读取过后,输出内容
fmt . Print(str)
fmt . Println
("文件读取结束" )
此时代码已经写完,运行。
此时出现问题:不知道 io 包是什么,需要把 io 包引进去。文件就读取完成了。
package main
import
"fmt"
"os"
"io"
此时进行读取。可以看到读取内容如下:
此时读取完成。