00:00
我们接着给大家介绍一下。Go语言里面的写文件操作的应用实例,那前面我们讲了两个案例呢,都是介绍的如何从文件里面去读取内容,那现在呢,我们来看看怎么把内容写入到文件,这个呢在我们实际开发中也是用的非常多的。那首先我们来看一下写文件的一个基本介绍。呃,在写文件里面,在写文件的时候呢,我们首先要用一个函数叫做open file。Open file这个这个函数,这个open file这个函数呢,里面有三个参数,我们一个一个的为大家介绍,首先我们要知道open file这个函数呢,它是在OS包里面。也就是说它是属于OS包里面的一个函数,那么第一个参数看一下,第一个参数呢,就是你要把文件的内容,要把这个内容写入到哪个文件里面去,这个就是文件的路径明白。
01:02
第二个呢,Flag这个flag呢,代表你打开这个文件的模式,那文件的模式有几种打开方式呢?有这么多打开方式。比如说。只读只写或者读写的模式等等,还有追加的模式,待会我们会再介绍一下啊,那嗯,那这样子啊,我们我们把这个flag到底有哪些给大家再再看一看,大家看第一个参数呢,是你要把这个内容写到哪个文件里面去,对吧?第二个呢是文件打开模式,那文件打开模式有哪些,我们来看一下。打开我们这个文档。请大家点一下OS这个OS这个包包里面呢,有一个叫constant,这是常量,大家看这里。这一块。就是我们打开文件的几种模式,而且告诉大家这些这几个模式呢可以组合,也就是说通过一个竖杠。
02:02
可以组合使用。你比如说第一种叫。这个read only,那这个呢,就代表以只读的模式打开,如果你是以只读,只读模式打开这个文件的话,那么这个文件只能读而不能写。下一个叫以只写的方式打开,那这样子的话,这个文件呢,只能往里面写,而不能读取。当然,如果你以这个读写模式打开,就说既可以读也可以写。还有一个openend,这个end,听这个名字就知道什么意思了。这个就是说,如果你用追加的模式打开呢,那你往里面写的内容,它实际上是不会覆盖原先文件的内容,而是追加到。文件的尾部。那这个create就是创建,就是说如果这个文件不存在,它会创建一个新文件。那大家注意到啊,在我们这个文件操作里面呢,没有一个专门的函数是创建文件的,是什么呢?就是说当你打开这个文件,你是以o create这个模式打开的时候,如果该文件不存在,它就会自动给你创建一新文件。那往往呢,我们会。
03:19
把这个create和这个写组合在一起使用,待会呢,我们有一个案例,就是把这两个模式组合在一起使用,这是允许的。OK,好,其他的另外几种呢,我就不再介绍了,用的比较少,对不对,一个是同步,一个是打开的时候是清空。所以这个模式打开很重要啊,如果你打开错了,我告诉大家,那这个问题就很严重。你比如说你用这个o trick打开,那你原先这个文件就自动被清空了,你原先有多少内容全部清空,这是一件灾难性的事情啊,比如说你用一个for循环,把你文件夹里面所有文件都遍历打开一次,那里面的文件就全部丢掉了。
04:03
所以说大家在打开这个文件模式的时候,在选择这个文件打开模式的时候,大家一定要特别的认真小心,要根据自己的需求来打开。好,这是我们所说的第二个参数,第三个参数叫文件模模式,这个叫文件权限啊fair mode,那么我们看看这个里面有什么内容,我们打开看一下。先把这个打开一下啊,同学们找到刚才老师说的那个文件叫file open open file。是这个文件看到没有。大家看里面有个fair mode,那这个fair mode是什么东西呢?大家来看一下。这些。这个fire fire mode主要是用在lixx操作系统下面的,或者是unix上面系unix操作系统下面的,如果这个在Windows操作系系统下面呢,这个fire mode。没有,没有作用就是无效。
05:01
那准确的来讲,它有哪些模式呢?比如说是。如果你是以四的方式打开,它有三个占位符,它一般是有三个三个占位符,第一个呢代表文件所有者所拥有的权限。第二个是代表。其他组。呃,就是文件所在组的那些用户对这个文件所拥有的权限,还有一个呢,就是其他组所在。用户的权限,那么这个一个R呢,是用四来表示的。这个W呢代表可写,用二这个数字来表示,还有一个X代表可执行,是用一来表示的,明白,所以说这块如果说大家想了解这个file mode到底它代表什么含义。再注意啊,我再说一遍,这个fire mode在Windows下面是无效的,就是你写了也不管用,它这个呢是在Linux或者是unx系统下面才有用,那关于这个知识点,我给大家说做了一个说明,如果大家想对这块权限控制有一个了解呢,大家可以看一下这个上规谷的linu课,课程里面有一个章节,你就看了一个章节就说的很清楚。
06:10
其实说说的再具体一点,就是后面这个呢,可以指定,可以指定这个文件,这个这个这个文件它是用什么权限来进行控制的。OK,那么整个这个open file,它会返回两个参数,一个是这个文件指针,也就是我们前面所说的文件句柄。还有就是L,也就是说如果你这个打开错误了,那么会返回一个L值。明白好,那关于这个写操作的时候,我们用这个open file,打开这个open file这个函数呢,我们就先给大家介绍这里,下面呢,我们走一个案例,好,我先把这个板述一下。我先把这个板梳一下啊,同学们跟上思路。那刚才老师呢,讲了一个写文件的这个应用实例的介绍。
07:04
我们给他一个标题二。然后呢,刚才我们做了一个基本的介绍。基本介绍主要介绍的是这个OS,这个包包里面有一个叫open file这个函数。主要是介绍这个函数了,对吧。好的,我给他做一个本书。我给他做一个本书没问题吧,那么我们讲这个函数,具体的说我们讲了哪些呢?讲了这些东西。就是把这一个函数。啊,把这个函数里面的三个参数做了一个介绍,这个是文件名,这个是打开的方式。第三一个呢,是权限控制。那这个文件名就不多说了,这个。这个打开模式呢,是这样写的,可以组合使用,就说你既可以用这种方式,并且用这个create方式打开,待会我再做案例,这个mode是在这我要强调一下啊,Fire mode呢,它的权限控制主要是Linux或者是unix下面有用。
08:11
那么在Windows下面呢,它是无效的,也就是说在Windows下面你写了也没有什么作用,明白好,我把这块呢给大家做一个本书。好,这是这么一个案例,那下面呢,我们就来,诶这个应该是标题三比较好。标题三,好,我们再来看下一个。我们现在呢,就来举些例子给大家讲解一下在勾浪里面怎么去写文件。那打开一下。好,基本应用案例,那么基本基本应用实例里面的方式一里面我给大家准备了四个案例。是案例,我们根据这个需求来一步一步的实现,就说第一个是干一个什么事,我们走代码,第二个干什么事,我们走一下代码,通过这个走代码演示案例呢,大家就可以很快的掌握写文件操作。
09:07
这个技这个技术好的,来吧,我们先来看基本应用案例。第一部分。案例一好,案例一第一个案例,我们先写一下,第一个案例呢,给大家准备的是这个案例。跟上老师思路啊,打开创建一个新文件。要要求大家创建一个新文件。创建一个新文件,写入5G。Hello garden。那这个地方我先说清楚啊,我们这个写往里面写呢,我这里采用的是带缓存的这个reader writer,前面我们在读这个文件的时候,我们是不是用那个reader。那个reader是带缓存的,那同样在OS,在这个buffer IO里面呢,它也提供了一个带缓存的writer。就是这个writer呢,可以通过带缓存的方式往这个文件里面写内容,那经常呢,为了提高这个效率,往往我们会选用这个。
10:09
Writer这个带缓存的writer来完成这个写文件的任务,所以说在这里呢,我先给他打个打一个打一个,这个说明就是我会用writer,带缓存的writer往里面写内容,里面呢,它有个方法叫writer,呃,Write write string。OK,好,那现在我们就来开始完成这个代码。那我们来完成这个代码。好代码实现,那跟上老师思路。那首先呢,我们还是新建一个文件夹吧。好,新建一个文件夹,而且这个DEMO比较多,对不对,案例比较多,我新建一个。Fire DEMO。民事。好的,我就直接写这个东西了,同学们跟上思路,那写一个文件叫main.go。
11:02
老规矩,前面这一部分呢,老师就不多说了。粘过来。因为这次呢,我会用到的是一个buffer IO。所以我就是一个buffer IO。能理解啊。那现在我们来开始来玩一把这个东西,现在我们的目标啊,就是创建一个新文件。先把这个需求拿过来,创建一个新文件,并在文件里面写入五句新的内容,叫hello garden。那第一步我们应该干什么呀?第一步,是不是先打开一个文件。打开文件,比如这个文件呢,我们就打开D盘下面的ABC.txt。啊,这个文件是不存在的,我们把它创建起来。那我们要用OS包里面的这个file open file。Open。发。好,第一个我们先把这个文件。
12:01
写清楚,我们要写到D盘的ABC.txt对不对,所以说这个先写好。那么打开的模式大家看一下。打开模式呢?刚才。刚才已经给大家说了一下。我们这次选用的打开的这个模式,用这个啊,我们用写的方式打开。我粘贴了一份。然后竖杠,同时呢,我还要做一个组合。用这个o create,就说如果文件不存在,我们就创建一个新文件,能理解我的意思吧?创建个新文件,就组合一下,最后这个呢,大家看到它是一个int类型,我就写个0066。其实这个啊,同学们再说一遍,这个呢在Windows下面是没有什么作用的,明白吧,没有什么作用,好这时呢,我们就会返回一个文件句柄啊,这个呢,我就写叫文件名字好吧。
13:00
这样子就更好一点了,叫文件路径吧。Pass。大家看清楚了啊,Path,然后这边会返回两个,呃,会返回两个参数对吧,会返回两个值,一个呢就是这个文件句柄,还有一个就是L。还记得吧?那我做一个判断。如果这个L它不等于,那就说明怎么样打开文件错了。我就说出一句话。Print f。叫什么呢?Open fire。把这个L信息输出来。并且呢,我们来一个换行,诶这写错了。好,那么如果一旦错,下面代码就不要走了,直接return。那如果这个error没有发生,说明我们打开这个文件成功了,那如果打开这个文件成功,我们就往里面写内容啊,准备。准备写入五句话。
14:03
注意跟上老师思路。写入。写入舞剧hello garden。那首先我们先把这个内容准备好吧,比如说这个要写入的内容,叫我写一个叫。等于。Hello garden。没问题了,同学们。Hello。先把它准备好。那现在呢,在写入的时候,我们用的是一个带缓存的writer。那我先把这个writer啊,注意听写入时。写入时。使用待缓存的。缓存的啊,缓冲的也可以。缓存的这个writer。对不对,那这个writer在哪里呢?通过什么方式来做呢?跟前面一样。Buffer IO里面有个六。
15:00
Writer。啊,六个writer,把这个fire置顶放进去。同样它也会返回两个参数,第一个呢,就是这个writer啊,它就返回一个参数啊writer。OK,我们来看看这容是不是返回一个参数,看看一下这个需求,打开这个。我们这个代码里面有一个buffer IO。Barber里面呢,有一个叫6WRITER。看到new writer是吧,这个new writer呢?呃,它返回一个writer,看到没有就返回一个writer。没问题吧,返回没有没有其他信息,好,那我们就把这个writer拿到了,那有这个writer过后,我们就往里面写东西了啊,不用for循环写五句。跟着老师思路啊,同学们,I小于五,I加加。那写五句怎么写呢?这个writer里面有一个方法,就是这个writer,它有个方法叫。
16:02
十寸。就是往里面写字符串,那写字符串,当然我就把这个十寸放进去就可以了。不要忘了一件一件事情啊,我们每写一句呢,就该换行,所以说。把这个斜杠N也带上,如果我没有换行的话,就写在整个就写在一行了,明白吧,这个斜杠N代表换行的意思。西安表示换行。这个我就不再多说了,斜杠N表示换行,我们在前面讲go浪基础的时候,其实老师已经说过了,这个是一个转义符,那转移符斜杠刚表示的就是换行符,能理解。好,那么经过一番这个操作过后呢,我们后边要关闭这个文件啊,那这个打开过后,因为这个你是O明确是open过来的,所以说呢,要及时的关闭。及时关闭这个file。居民。防止内存泄漏。
17:02
没问题吧?那怎么做呢?Differ defer file.close。洗完了。但这个呢,实际上也是在我们这个main函数执行完毕之前,要他把全部代码都走完了过后才会去调这个close,因此你下面用也是没毛病的,对吧。好,写入。呃,那写入过后,呃,写入过后我们看看现在是不是还有一件事情啊,注意听,因为你这个writer是带缓存的。注意听这句话啊,因为这个writer是缓存的,是带缓存的。缓存的,因此因此你写入的这个四准其实还没有实际的落盘,也就是说这个时准呢,他还没有真正写到磁盘上。你要用一个flash函数才能把它缓存里面的内容写真正写入到磁盘里面去,注意听时代缓存,因此。
18:03
因此,在。在调用。调用这个right方法时。方法是。其实内容,其实内容。内容是先。注意听这句话啊,先写入到。写入到这个缓存的。缓存,那么我们来看看是不是它有个缓存,打开我们这个地方代码看一个writer。打开它的源代码。看到源代码,同学们看一下。你们要认真观察的话,你们可以看到这个writer结构体的确有个八分。这个是大缓存,也就是说他在写的时候,他其实是先把这个内容写到这个buffer里面的,能能明白这意思吧,他是先把这个东西写到这个buffer里面的,所以说呢,我们必须要有个动作,要flash一下,大家看这这边有个函数。搜一下啊。FFLUSH。
19:03
Flash。再看这里。大家看这。这个writer里面有个flash,表示什么意思呢?Sh rights any buffer the data to the io.write比如说你要通过这个flash才会真正的把我们的这个内容写入到文件里面去,因此大家一定要注意啊,如果你没有这句话是要出问题的,怎么写呢?Writer点。Flash。这句话很重要,为什么我把这句话再说清楚一点。因此。在调用writer string,其实内容是先写入缓存的。所以需要。所以需要调用这个什么呢?Flash这个方法。方法将。将什么呢?将缓存的内容缓存。
20:03
缓存的数据吧,数据真正。真正写入到。写入。到文件中,如果你没有这个flash,你会发现你会发现一个什么情况呢?这个打开这个文件ABC里面没有任何内容。注意听这句话啊,这是很关键的,否则否则否则文件中。会丢失,丢失数据。丢失数据会没有数据啊,没有数据这点大家一定要认真要要注意啊,好,我们代码就写完了。就写完了,来,我们玩一把吧。保存一下,看看我们这段代码能不能把五句hello garden写进去,那看这出了什么错了。啊,他说。On the fan。WR,这写错了。
21:03
没有这个R。没有,这个R是RIGHT10寸,好,这边还有问题是吧。哦,大家看到我直接这样写是不对的,因为它是在一个包包里面的常常量,所以说要用OS。点一下能理解吗?同学们,因为你这两个常量是在这个OS包里面定的吗?对吧,你不能直接拿来用,你直接拿来用,你家不知道这是干什么的,明白好朋友们,现在呢,我们来玩一把。看看是否能够写进去CD点点CD file04DR跑一个go。M。我们可以看到代码没有任何的错误提示,那应该说能够成功打开我们的D盘,我们可以看到里面有个ABC.txt文件,打开它。我们打开过后,我们发现里面的确写了五句,Hello garden,一句,第二句,第三句,第四句,第五句,没毛病吧。
22:05
一共写了五句,而且呢,每个都有换行,看这个就是换行符对不对,因为我把它打开了,我把这个视图里面呢。把这个全部都显示了,这样你看是不是就看不到这些乱七八糟的东西了?看,写了五句,Hello garden。嗯,因为你原先是没有的啊,现在我们就创建成功了,我们再来跑一下,大家再确认一下啊,来把它删掉。三掉沟,我们再运行一下。看到走我们可以看到这马上就创建了一个文件,对吧,创建了个ABC,这个ABC里面的内容呢,就这样子的,好这这这个是看不到啊,这样打开就没问题。你看这是换横幅。这是换行符没问题吧,正确的啊,正确的完全正确,好,那现在呢,我们有了这个信息过后啊,我们把这个代码给大家整理一下,这是我们完成的第一个案例。第一个案例,打开它。
23:00
我把这段代码呢给大家整理一下。对吧。OK。稍微的整理一下,这句话很重要啊,我再多说一句话,这句话一定要写,如果你没有写flash,你会发现文件中没有数据。好的,我把这个给大家整理一下。第一行到第23行。保存。好,紧接着我们继续截取。好,紧接着我们继续截取,这是第一。第一部分,那么第23行后面全部截完。24~29。一次性全部结完。对吧,OK。好,同学们,那么我们第一个案例。这个写文件的第一个案例,包括他的基本介绍呢,我们就先给同学们讲解到这里,大家可以自己动手写一写,就你们也可以创建一个文件,然后在里面写一些内容,大家看看能不能写进去,好吧。
我来说两句