00:01
好,同学们,我们来看关于读取文件的几个应用实例,那么我们为大家演示的第一个应用实例是这样子的,读取文件的内容并显示在终端。明白就是把一个文件内容读取出来,然后呢,我们把它显示好,而且呢,现在我们第一个用的是带缓冲的,带缓冲的这种方式呢,往往可以提高效率,而且呢,呃,特别适合去读取。比较大的文件在这里呢,我们会用到OS包里面的open,还有file这个结构体面的close,以及buffer IO这个包里面的一个叫new reader。以及这个reader里面的叫read string这个函数和方法,呃,那么我们来一起演示一下,OK。好,首先呢,我们打开这个文件对吧。对,我们先说一下这个案例,首先这写的是读取文件,就是读文件操作的应用实例,先给他一个标题吧。
01:00
这是给他一个标题二好吧。然后呢,我们第一个案例。低干力。我把它整理一下啊,同学们跟着老师思路。第一个案例呢,演示的是这个,好,我们来一起完成。那这个呢?这个案例它的要求是读取文件的内容。并且呢,显示在终端。同时呃,要求我们使用带缓冲区的方式,这有三个要求,这有三个要求,那么我们来代码页代码实现一下。代码实现跟着老师思路啊,好,打开我们的Vs code。那我在CHAPTER14里面呢,新建一个文件夹叫file。DEMO。零二。OK,好,现在呢,在这里面建一个面包。Man,在这里面呢,新建一个文件对不对,跟着老师思路啊main.go。
02:03
好,因为前面这有一部分是相同的,老师就不重写了,把这块拿过来好吧,包括打开这个文件,其实这块都是一样的,我就不反复的写了好吗?把这个粘过来。那现在呢,我们已经打开这个文件了,对吧,打开这文件,我们在文件里面先写一点内容进去。打开D盘。好,我在里面写了这么一些内容,看到hello world,北京ABC goon,那再写几个吧。比如说是。Go。Hollywood。Hollywood OK。好,这个呢,我们把它保存一下,待会我们要把文件的这些内容怎么样读取出来。读取出来。好,我先把它保存了啊,先把它保存了,然后呢,现在大家看到,当我们打开一个文件的时候呢,我们要及时的关闭。当。
03:00
当函数,当这个函数退出时。退出时啊,结束啊。当这个函数结束时啊,退出也可以退出时。要及时的,及时的。及时。及时的关闭,关闭这个file,那怎么做呢?用这个deferer,我们前面学过的defer,就是说在函数结束之前呢,它会调用这个dier后面的这些代码,对吧,那我就写个close。这样写是最好的。就在函数退出的时候呢,它会再去调用这个fire close,这样呢就会避免我们文件句柄的泄露啊,注意听要及时的关闭。要及时关闭这个file句柄。句柄。否则。否则,句柄。句柄,否则会有内存泄露,否,否则会有内存泄露啊,会有内存泄露。
04:08
这点大家要注意一下好了,那关闭,当然这个时候啊,注意,因为这个dier呢,它是函数退出时才去调用,所以你下面还是可以正常使用这个文件句柄的。这点我们在前面已经讲过了,对不对?关于differ这个关键词,它是一个什么样的运行机制,老师在前面已经讲过了,这里我就不再反复的多说,那现在呢,我们来已经把文件打开了,好打开过后呢,我们下一步。下一步就是创建一个reader。Reader,这个reader是带缓冲的。它是一个指针类型啊,它是带缓冲的,是带缓冲。那么我们来看看这个reader是什么样子的,先把这个函数写出来,它这样写的六。他是。在这个包包里面注意听。再一个叫buffer IO包里边。
05:02
Buffer IO包里面有一个函数叫6READER。然后呢,把这个范写进去,这个会返回一个reader。那么我们看看这个reader是什么,打开我们的文档。打开我们的文档,先给大家看一下。跟着老师思路啊,同学们。在我们的八份IO这个包里面,我点了一下。里面呢,有一个函数。函数叫new reader。大家看new reader。看到没有,这个new reader呢,它会返回一个reader,四个指针类型,打开看一下。看到没有,点开这帮可疑看他的源代码。这个reader大家看这个reader它是带缓冲的,而且默认缓冲区为四零。九六个字节。它是带缓冲的啊,你看buffer的input就是缓冲的这个输入。
06:02
它是缓冲的一个输入,那这里呢,它默认它默认如果我们看这个源代码,这个就是一个reader reader结构体,大家看清楚了,这是一个reader结构体,看清楚没有type reader structure里面呢,它会有缓冲,这个缓冲默认大小是4096,明白好,我把它写到这里了。复制一下啊,看源代码就能看出来,默认。它默认缓存大小是4096个字节。啊,注意默认缓冲区。为4096。OK,那那有缓冲有什么好处吗?有好处有,如果有缓冲的话呢,那么我们在读取这个文件的时候,它并不是一次性的把整个文件读到内存,而是读一部分,然后处理一部分,这样呢,我们可以处理一些比较大的文件。OK,好,既然有了这个reader,下面呢,我们就循环的。
07:03
循环的读取文件的内容,那既然你是循环的读取,那应该是个for循环。这个能理解吧,就是你肯定是循环的读取嘛,那么这个时候这个reader里面呢,有一个方法,它有个方法叫。Read。Read string这个方法,这个方法呢,它会填入一个结束符习杠,恩,大家看这句话什么意思啊,这句话的意思就是我用这个reader,因为这个reader已经跟这个file文件绑定了,也就是通过这个reader reader去读取这个文件的内容,那么读到多少就结束呢?读到一个斜杠N,斜杠N,大家注意,斜杠N是换行符的意思。读到。一个换行。换行。就结束,一次就结束。明白我的意思吧,那也就是说我们一行一行的读,因为大家都知道,我们这一个文件里面,相当于说第一句话,我就先读到这个hello word。
08:07
然后一换行,再读取第二行,循环的读明白我的意思吧,因为它第一行呢,因为它读到一个换行,这个就是一个换行,大家看到。如果你们,如果你们有兴趣的话,你们可以用这个打开。用ad的plus打开,你们可以看到的确有个换行符,我给你们看一下。显示所有的制表符。大家可以看到这个就是一个换行符。看到没有?只是这是个隐藏起来的,我把它打开过后,你们就看到这有个换行符。但这个符号看起来比较怪,对不对,好平时呢,一般不会把它打开,所以说一般是把这个勾掉看不到的。这个就是一个换行符,好,那也就是说这句话的意思就是每读到一个换行符就结束。那你读的时候呢,这个reader会返回什么样的变量呢?它会返回两个结果,一个是十寸,一个是L。
09:03
那么告诉大家,它读取的内容会放在这个十寸,如果在读的过程中产生了错误,它会把错误信息放在这个error变量。也就是说这个ER,这个reader string里面呢,它会返回两个变量,呃,返回两个结果,一个是string string就是它的具体内容,而这个error呢,就是在读取过程中产生的错误信息,能理能理解吧。好了,那既然如此,那么我们就可以来做一个判断。如果L。不等于尿,这说明发生错误了。这说明发生错误了,我们可以可以把这个错误信息打出来。好,我们可以把这个错误信息打出来。呃。这样子做的啊,这样做。他有一个错误呢,是这个他有一个错误,这个错误。叫IO。点e of就说。如果他这个L等于了。
10:02
I e of,这个e of就代表读到文件的末尾了。IO。点e of表示文件的末尾。能理解,那我就应该结束这个读取是吧,就break就完了。所以说应该这样去处理更好。再说一遍啊io.e off代表文件的末尾。那否如果没有到这个文件末尾怎么办呢?我就反复的读嘛,就循环的读取,好读取一行,我们把这个内容输出。输出内容输出内容很简单,Format。就是用这个。Print。LN输出来就可以了啊,不要打这个LLN,因为它本身也本身会把这个换行符也读进去,所以说如果你打一个LN的话,就会有两个换行,能理解这意思吧,那就直接把这个内容输出了。那叫PRINT10寸,这个十寸就从文件里面读到的,好等到他不停的读,不停的读,最终呢,他读到一个文件末尾就退出来了,好,最后这个就结束了,我们再输出一句话,文件读取结束。
11:13
文件读取结束。好了,那现在这个代码就写完了。这句代码就写完了啊。大家看清楚了,诶这有问题,这地方呢,他说不知道IO是什么。那就意味着我们还得引另外一个包,哪一个包啊,IO包,因为你这里用到IO包的一个uf对不对,这个产量好,所以说呢,我们要把IO这个包也引进去。好,这样代码就没问题了。这个就是一个输出,那么等到他退出的时候呢,他会去调这个ER。这个地呢,会把我们这个文件句柄进行关闭。那这样子的话,就相当于说把一个文件就读取完完成了,能理解吧,好,那么现在我们来看看能否正确的读取呢。
12:02
好的。我们CD,我们DRCD到CHAPTER16。诶,没有幺六,我们是幺四是不是DRCD到fire demo02CD到组组文件夹,然后DR里面有一个go run命顶go跑起来。我们可以看到。它输出的内容诶。又开始了。又开除了他。他。特别讨厌啊。他老是认为这是个病毒。就没有办法,就只能退出。看。因为他认为你在下面有个exe文件,他认为这个exe文件是一个病毒,你看这个360就是,哎呀做的是真的是很烂。好,你看现在我们就跑起来了。大家可以看到它读取的内容。
13:00
是不是这个Hollywood,北京ABC goon go Hollywood,这还有一个换行,因为我大家也看到了,最后为什么还有一个空行啊,就是因为我这边是不是还有一个空行大家看。大家看在视图里边,你们注意观察,是不是这还有个换行啊,他把这个第四行也读了一下,第四行就是一个空行,但是呢,它也是个空行,对不对,如果你把第四行往上提一下。你再保存。你再保存。那这个时候呢,你读取的时候,这个空行就没有了。大家看效果,你看就没空行了吧,好这个就是我们整个这个一个一个信息啊,这个一个信息就拿到了,就Hollywood北京ABCGO,好这个呢,就是我们第一个案例,这个案例我们演示了什么呀,这个案例我们演示了一个就是使用带缓冲区的reader。来读取一一个文件,并显示在终端,能理解好,我把这个代码呢给同学们整理一下。
14:04
好,这段代码我就直接。复制过来了啊。好的,我复制一下。然后呢,我把它直接放在我们的这个。文档里边去。来吧。把它放到这儿。大家看一下。这里面的关键代码是哪里?同学们,关键代码是就是从这开始。对吧,从这开始到这结束,关键代码是这块,我把它给同学们标出一下。好的。大家领会一下啊,领会一下好,那么第一个案例呢,就给同学们先介绍到这里,大家体会体会一下。
我来说两句