00:00
我们在接着看下面的问题啊,大家看到,呃,还有后面还有三个练习题。那这三个练习题呢,第一个是打开一个存在的文件,也就是说这个文件呢,事先要存在。对吧,然后呢,将原先的内容覆盖成新的内容,诗句你好,上硅谷。也就是说我们。要打开一个已经存在的文件,然后呢,把这个已经存在文件里面的内容给它覆盖掉,覆盖覆盖成什么呢?你好上硅谷好,我们把这个呢也给大家做一个演示。就说每一个案例呢,都有它的一个代表性,就总是跟前面有些不一样的地方,所以大家要注意注意看一下,在不一样的要求的情况下,我们在处理这个代码的时候,有哪些地方需要大家注意一下,好那么我们把这个需求呢打开。好,来,我们新建一个文件。我们新建一个文件啊,比如说DEMO。
01:00
呃,这个我们再新建一个文件夹,DEMO05。我们叫。DEMO。零五。好吧,好,我们干脆这样子,呃,这个文件夹里面新建不同的这个子文件夹吧,这样子就比较清晰了,好,我们第一个呃案例第一个练习吧。002就是相当于是第二个练习对吧。在这里面我们新建一个文件夹。然后新建一个文件may.go。OK,然后呢,我们把这块需要用到的地方,把它粘贴复制下来。写一个主函数。那同学们注意现在的要求,现在的你的需求是这样子的。对吧,那我们想一想,他说打开一个存在的文件,将原来的内容覆盖成新的。内容,然后呢,新的内容就是十句你好,上硅谷。
02:02
那这里面呢,我们仔细一思考,其实我们就会发现他跟前面这个案例其实很像的。他是不是跟这个案例很像?但是不一样的,就说这个文件已经存在了,这是第一个,第二个呢,就是它是覆盖的写,就是原先这个内容呢要被覆盖掉,所以说其实我们只需要在原先这个案例上做一些修改就可以了,没有必要再重新写一遍,能理解我的意思吧,好,老师,把这一段已经用过的代码拿来为我所用,我做一点修改,大家看一下怎么修改。首先。首先呢,我们打开这个文件是需要存在的。是需要存在,就是打开的这个文件,打开已经。已经。已经存在的文件。Okay。打开一个已经存在的文件。
03:03
那么在打开一个已经存在文件的时候呢,我突然想到刚才我们这个案例有点问题,就是这个案例大家回忆一下。我们在写这个hello garden的时候,我打断一下啊,就是我先把刚才的一个问题说明白了,过后呢我们再讲。现在正在讲的问题,那刚才这个里面有一个叫hello garden,我们发现有一个问题,大家发现什么问题没有,我们再再来运行一下。我们先跑一跑。我们打开这个文件过后。你们有没有发现他并没有换行?就说如果用记事本打开,你发现它并没有换行,但是呢,我们用这个ID的plus打开,它却是换行的,这是为什么呀?告诉大家,因为这个记事本呢,他不他不去。他没有对这个斜杠N做一个完整的识别,因此呢,这个解决方法要像这样做。
04:01
要斜杠R,就说带一个斜杠R斜杠N,这样子的话呢,就可以解决这个问题,因为有一些编辑器呢,它认的是斜杠R,有些编辑器呢,他认的是斜杠N,明白我的意思吧,所以说呢,我们这帮可以把这两个都带上好,这样子就绝对没有问题了。那么我们再来试一下。就是说把刚才这个问题解决一下好不好。打开。没问题吧,然后呢,我再把这个打开。相当于说他重新写入了大家看。这时我们用记事本打开,你发现它也是换行的,对不对,那么我们用这个ad的plus打开呢,你发现它也是换行的。所以说我们这样处理一下就可以了啊好,回头我们接着讲刚才这个案例。好,现在我们打开一个已经存在的ABC.txt文件,没毛病吧?没问题,好,现在呢,一样用这个open file打开,但是不一样的地方是这里。因为他这个文件是已经存在的,所以说你没有必要再用create,这个时候我们要选择这个东西。
05:08
我们选择另外一个参数啊。呃,另外一个参数,我们现在看一下,诶,我这个好像断网了。对吧。断网了,断网了就就断网吧,我们自己写一下OS,我们看一下刚才这个笔记里面写了一个叫。叫做O_TNK这个就代表清空就清空啊t tun。好,我们写一下。T。RUNC。OK打开,那这样的话呢,就说他是以写的方式打开,同时呢,上来过后,先把这个文件里面的内容怎么样给你截取掉。就这种方式呢,就会把原先存在的文件里面的内容清掉。就你什么都不写,不写的话,不管你写不写啊,他先先把你这个文件里面的内容先给你干掉。
06:04
然后呢,这句话没有变化,只是这写的内容呢要发生变化了,他写的是你好,上鬼谷是中文的你好。上硅谷。好,跟上老师思路,上硅谷。OK,没问题吧?到这个地方呢,我们就写的是你好,上归谷了。好,下面呢,我们仍然用这个new writer往里面写,写的是五句话,我是。人家是。呃,我们再看一下他的需求。它的需求是覆盖成新的十句,好,那我就把它改成十。好吧,那为了这个好看呢,我每个地方直接搭把这个斜杠R斜杠N就带上了。没问题吧,同学们就斜杠R,斜杠N就直接往里面写进去,同样这个地方也要flash一下明白。好了,我现在已经写完了,来,我们来运行一下这个代码,看看能否。能否成功?
07:00
CD到上一级,CD到fire。DEMO05没问题吧,DRCD到第二个练习,然后go run,命顶,Go跑起来。好,我们可以看到没有任何的错误,打开我们这个D文件。打开这个D。文件夹里面有个ABC.txt看。没毛病,写进去十句,那么我们再用ad的plus打开,我们发现也是没有任何问题的,成功了啊好,我们这第一个案例,我们就就是这个我们就做完了,我们把它板述一下。我把整个复制一下啊。然后呢,我就放到。我们这个地地方去。可以了吧,那我们注意观察到这里面的变化,主要是在这里。是不是我们打开的模式发生了一个变化?是不是主要是在这做了一个修改啊,其他其实我们我们没有变化对不对。
08:05
好,另外呢,为了保证他在记事本,还有呢,就是在我们的这个ad的plus打开都能够看到换行,我这做了这个处理。带了个斜杠R型N,因为刚才讲过了,有一些流,有一些有一些编辑器呢,他认的是斜杠R,有些编辑器呢,它认的是斜杠N,那因此呢,我把斜杠R斜杠N都写进去,这样就没任何问题。好,这是第一个,我们紧接着来做第二个题,下一个题啊,下一个题呢,大家看到。他说。他说,打开一个存在的文件,在原来的内容上追加ABC English,注意,这个时候呢,又发生变化了。它不是覆盖写。说并不是把原先文件的内容覆盖掉,而是呢在原先的内容上追加,这个呢也是经常会用到的,比如说将来你写日志。
09:01
你在记录一个日志的时候,你不可能说把原先的日志给覆盖掉吧,你总是在文件的屁股后边给他追加,那么这个地方我们来怎么写一下,来走一下代码,代码实现。那刚才老师思路。那我们在这个DEMO05这个文件夹,这个文件夹里面呢,再建一个新的文件叫零零。X。Access access03。我们在这里面呢,新建一个文件叫main.go没问题吧。那其实你会发现跟前面这个呢。和这个第二一个练习的文件很像,于是乎我把这个先粘贴拷贝一份,做一个修改就可以了。大家猜一猜我会怎么改?大家猜一猜我会怎么改?其实啊。其实我要这么改了。我把这个需求。先粘过来。这个需求是这样子的,对吧。
10:01
注意它是在原先原来的内容上追加ABC English,那这个时候呢,咱们就不要用这个方式了。不能用这个我们得换成另外一种方式,追加的方式,追加的方式是O_end。APPEND。来把它改一下。APP。这个就叫追加。一个逗号。这个就叫追加了,同学们看,主要是这里发生变化。那么我们再来看看它是追加这个没有变化,这改一下啊,这个叫ABC English。ABC逗号。English。英格历史没问题吧,同学们。How English?写进去了,那这个时候呢,我们还是用那个new writer往里面写,他说写几句进去啊。他说,写几句写。在原来的内容内容基础上追加一个ABC English,他没有说多少句,呃,既然没说多少句,那我就随意了,我就加上十句吧,好吧,就加十句,这也没没什么问题,好写进去过后再追加,注意看,唯一发生变化的就是这里。
11:15
我们打开这个文件的模式发生变化,是openend,而不是那个覆盖写了好,我们把它保存一下来,朋友们运行一把。CD点点上一级CD到0X。EXE03EXERCISE03里面去DR go run main.go跑起来。我们可以看到这个代码也没有报任何错误,这是再次打开这个文件。啊,他说外部已经修改,刷新一下,果然注意看啊,原先的你好,上硅谷没有发生变化。他是在这个基础上追加了很多内容是吧,词句ABC English没有问题,我们再用这个记事本打开,我们发现也是正确的。
12:03
因为你这边带的有斜杠R型N嘛。它不识别斜杠N,但是它识别斜杠R对吧,它识别R好的,那现在呢,这个题我们又搞定了。没问题吧,这个叫在原来的内容上追加内容的,这种方式我们有做了讲解。好的同学们,我把这个呢也给同学们做一个。板书。好找到。我们的这个笔记。板述一下。那现在呢,我们要重点就看这里哪里改变了,其实就是这个位置改变了,就是打开这个文件的模式发生了变化。那么你打开这个文件的模式发生了变化呢?那后面这个写的形式,它自然就会按照呃碰的方式来追加内容,对不对,而不是覆盖写。好,这是第三个题,我们紧接着再看第四个练习题。第四个练习题呢,它是这样子的。
13:00
大家看这里需求啊,他说打开一个存在的文件。将原来的内容读出,显示在终端,然后再追加五句hello,北京,那也就是说现在呢,它既有读的操作。又有。写的操作。那大家想一想,此时此刻我们应该怎么打开啊?是不是要以读写的方式打开,而且要以追加的方式打开,就说它是一个组合拳,首先是读写同时呢,还要追加。既可以读,又可以写。而且还是追加这个方式,写明白好,那么我们紧接着来完成这个题。来,朋友们。还是打开它,我们新建一个文件夹,叫exercise。零四这是第四个练习。我们新建一个文件叫main.go没毛病吧?然后呢,把前面这个代码粘贴复制一份。
14:00
好,因为现在文件太多了,我先关闭一部分好吧。好,同学们,看到现在只有一个面点够了。那这个地方打开的两个模式都要发生变化,首先呢。这个地方openend不用改,因为你本身就是倒型是追加的方式嘛,对吧,所以说呢,这个openend不用改,但是前面我们要改一下。前面我们要改成。叫O下划线。RD。RD就是读写的模式,打开就RDRDWR。O。OS。好把这个粘一下啊,小心。啊,就是RD。WR是这样写的吧?看一下。RDWR没没没毛病啊,RDWR这个是以读写的方式打开,好,而且是追加的方式好,这个打开没有毛病,那么我们现在呢,就要往这帮重新处理一下。
15:06
首先。我们要读出来。是不是因为你这直接就往里面写东西了嘛,对吧,人家这写的是,人家这要求是。打开一个文件,首先把内容读出来,然后再写。是这个需求吧。那我们首先呢,把这个哈北京。给他写进去。没没毛病,这个啊,大家看,Hello,北京。那么到时间他要写几句。写几句好了,我的呀。写五句好,我把这个改成五。这块写已经完成了,但是呢,在写之前我们要读一下。先读取。读取原来的。先读取原来文件的内容,并显示在终端。能理解,那大家想一想,我们我们这个读取原先的内容并显示在终端,我们是不是可以用这一个new writer new reader reader也是带缓存的,对吧,那么就一起来写一下啊,前面其实写过的。
16:13
又还是用buffer IO里面六一个。Reader还记得吧,把发放进去。没有毛病吧?那么这个时候我们用的是负循环来读取,还记得吗?好,我们读取一下。这边有个E。我们回忆一下前面怎么写的啊,同学们跟上老师思路。那这里面呢,我们用的是这个reader,里面有一个方法叫read。Read寸,还记得吧?瑞斯里面呢,有一个这个换行,换就是读取到哪个位置,那还是斜杠N,因为你最后呢,始终有个斜杠吗。是不是这个道理啊,我还是read的尺寸,然后读,每每每读到一个斜杠N,我们就算是一行的结束。好,然后呢,我们就来做一个判断,如果A。
17:03
它等于了io.e of,还记得什么意思吧?这个io.u e of就代表读取到了。如果读取到文件末尾。文件的末尾就不要再读了吧。文件的末尾。对吧,那就不用读了,那就直接怎么样呢?那就不做处理,那该怎么下面我们也不返回,我们也不返回,也不报错对吧,也不报错,就相当于说这个就就直接break就完了。就break就不再读了吗?那如果说没有读到末尾就继续读。继续读取。继续读,呃,就显示到终端,显示到终端。终端啊,显示到终端好了,显示到终端直接用一个print打印出来就可以了,注意这地方不要带LN啊,因为你本身读的时候把这个他把后面这一部分也读取到了,所以你你就直接把这个输出来就行了。
18:03
他读的时候就已经是字符串了,对吧,所以说你不需要再做其他的任何处理好这个这个做完了以后呢。这个读取完了以后,我们就往里面又写东西了,是吧,这个没有毛病,这一块是读取显示到终端,这块是写入进去。对吧,最后呢,有一个defer defer这个关键词呢,它会延时关闭我们这个句柄,等到我们把这个main函数执行完毕过后呢,它会调用defer关闭我们文件句柄,没毛病,好朋友们,那现在我们就来跑一跑,看看它现在能否成功。保存一下。保存一下好的,诶,这会有个问题,那应该要引入一个IO包。对不对,是不是要引入一个IO包啊。好朋友们,玩一把CD,点点CD。Ex exercise04。
19:00
当然里面有一个go,有一个命点go。跑起来。好,我们可以看到读取完全的没有问题,大家看这里。大家看这里整个把里面的内容读取进来的,叫你好上硅谷诗句,然后呢,ABC English写进去了,那我问再问大家一个问题啊。当我读完了过后,我又写入了hello,北京,请问当我打开这个文件的时候。那这个ABC.txt文件里面。除了。有这20句话之外呢,应该还有五句,应该还有五句,Hello,北京才对。因为它是追加嘛,所以说我们打开看有没有东西打开一下朋友们。我们发现完全没有任何问题,看看相当于说这这是他在没有写入之前的内容,对吧,你后面不是又追加了哈北京吗。没没毛病,而且中文呢也是处理的非常好的,没有乱码,没有乱码,你用这个打开也是一样。
20:04
是不是同学们?好,同学们,那关于这个又读写的方式呢,我们就又给大家演示完毕了,这里面的关键点在哪里?还是说这句话对不对?还是说这句话首先呢,你要告诉他,我是以读写的方式打开,而且在写的时候,我是以追加的方式往里面写。这块都很重要,好朋友们,我把这一块呢也给大家板述一下。板书到我们的笔记里面去明白。好代码实现。OK,给他来一个表格。没有毛病吧,同学们。跟着老师思路,那我把最重要的地方标出来。这块一定要注意。我们打开的模式是。读写的方式打开,并且是以追加的方式打开的,好吧。那大家也看到我们这里面是读的操作,这个地方是写的操作。
21:01
好同学们,那关于我们这个文件的这个写文件的这个基基本应用,实际上第一个第一种方式,我们就全部讲完了。啊,一共有四个案例,大家好好想一想,那这个讲完了过后呢,我们后面还有一个综合案例啊,我们先把这一块做一个。做一个这个。做一个这个这个小结,就说大家先把这四个案例把它搞清楚。好,那关于。写文件的。第一部分的应用实例我们就先给同学们介绍到这里,大家呢,把这个代码拿到过后好好的消化一下。
我来说两句