带缓冲的 Reader 读文件 | 学习笔记

简介: 快速学习带缓冲的 Reader 读文件

开发者学堂课程【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"

此时进行读取。可以看到读取内容如下:

image.png此时读取完成。

相关文章
|
2月前
同步读取文件
同步读取文件
43 0
|
6月前
|
存储 弹性计算 运维
读取文件
【4月更文挑战第29天】
60 2
|
6月前
|
Linux Windows
写入文件
写入文件。
39 2
|
6月前
|
移动开发 Java Linux
IO流:字节输出流FileOutputStream的超详细用法
IO流:字节输出流FileOutputStream的超详细用法
|
11月前
|
XML C# 数据格式
C#读取写入文件的三种方式
最近对文件的操作比较频繁。这里记录一下常用的几种文件读写的方式。 我这里使用窗体来做测试,例子在文末,可下载。
90 0
|
存储 C++ iOS开发
C++ 采用read()和write()读写二进制文件
以文本形式读写文件和以二进制形式读写文件的区别,并掌握了用重载的 >> 和 << 运算符实现以文本形式读写文件。在此基础上,本节继续讲解如何以二进制形式读写文件。 举个例子,现在要做一个学籍管理程序,其中一个重要的工作就是记录学生的学号、姓名、年龄等信息。这意味着,我们需要用一个类来表示学生,如下所示: class CStudent { char szName[20]; //假设学生姓名不超过19个字符,以 '\0' 结尾 char szId[l0]; //假设学号为9位,以 '\0' 结尾 int age; //年龄
119 0
|
网络协议 Java
FileChannel 文件流的简单使用
FileChannel 文件流的简单使用
174 0
|
存储 分布式计算 Java
记一次InputStream流读取不完整留下的惨痛教训
记一次InputStream流读取不完整留下的惨痛教训
348 0
记一次InputStream流读取不完整留下的惨痛教训
|
移动开发 C++ Windows
C++读取文件
C++读取文件