00:00
行,那么我们这个读进去来读进来这个数据呢,讲了写出去,这个数据呢也讲了,那下边呢,我们就把它俩合成一起,哎,先读进来,然后紧接着就给它写出去,其实相当于对这个文件呢,做了一个复制吧。Test reader啊,这个写有点长了啊。行,那现在呢,咱们就把这个过程呢给它集合起来,我呢把这个hello里边的文件数据呢读进来,读进来以后呢,我紧接着再给它写出去,在内存这块呢,我们就这这个这个hello啊哎读进来以后,在我们这个程序这个层面,哎,我这块就不s out了,我紧接着就给你输出出去,那不就相当于把这个文件复制了一份吗。就做这个事情,那这块还是这样的几个步骤,第一步你呢,是不是得创建这个file类的对象,嗯,File类的对象,这时候呢,得造几个对象两个了,指名叫读入和写出的这个文件,这是一个事儿,然后第二个事做什么。
01:14
哎,那对,那这时候就得创建咱们这时候流了啊,就是创建流的对象,哎这呢,因为涉及到多个,就是输入流和输出流的这个对象指明呢你哎读进来和写出去,这个流是谁,第三步是不是就是数据的一个读入和写出操作呀,哎,然后第四步呢,关闭流资源。所以整个我们这一章都是这个套路不断的,大家去强化一下,好,下边来写,首先我先去file,或者我这这个叫做s RC file吧,就是这个原文件的位置,哎,我们用一个file。现在是拿这个hello ctrl c在这双引号CTRLV,它然后file复制到的一个位置啊,我叫desk了,看你有一个file,哎,这个双引号,这个我叫HELLO2吧,哎,TX行,接下来创建两个流的对象,File reader。
02:21
File reader把我们这个原文件扔进来,因为对于我们这个输入流来讲,这个文件是一定要存在的。File writer把我们这个输出呢放进来,输出呢是可以不存在,咱们呢就直接用这个这一个参数的构造器了啊,刚才已经说这个事了,这个啊这块呢有异常,暂时呢我们先都去,诶这个诶整错了啊。暂时就是这个,我们一会再给它改成这个check开啊,先让它这个throw一下,呃,下边这个呢,用一个它啊这块也一样啊。
03:02
啊,它是抛的是个IO的啊,那我们就用这个大的了来处理,那你这样一说的话呢,我们上面这好像这个处理方式还写错了是吧。这个RO是不是不应该用它呀,哎,记着呢,大家我们关于这个流呢处理呢,都要用这个try catch finally,诶所以这个呢,其实也得改一下啊,咱们这个呢就改一下吧,先把这个呢包一下out shift z啊这样包一下,包完以后呢,把我们这个资源呢,你就放进去啊,这个呢,衣服是家里边家外边这都行啊这我这就先写一下这衣服吧。哎,它呢不等于好,哎这个呢,把它放进去,然后呢,Out作为一个track,哎,注意用这个track finally来做啊,那大家写的话呢,你可以先写成这种用throws的,这样你比较清晰的能看到这样几个步骤,然后呢,你再给它改成是用一个track finally,大家你别看到我这个代码长这样,你自己写的时候一上来先fair writer,等于个now,你就懵了哈。
04:02
怎么一上来就等着no呢,是吧,你不知道啥意思,其实你是先写的这个代码,这个呢,是后来你给他拆开的时候,它自动给你出去的啊,哎,就是写的话,你跟我这样一样,这个套路去写,那接下来我们这块呢,是一个读入和写出行读,读的话呢,一次读多个,那你得给我一个数组,叉型的一个数组拗一个叉,暂时咱们这个都短一点先啊回头呢,我们再说这个长度的事,那接下来定一个L音。哎,上面其实说过啊,它呢主要是来记录每次读入到咱们这个CB数组中的数据的长度,或者叫读这个数组中的数据的个数字符吧的个数。行,然后接着Y循环Lin等于F2点瑞的到咱们的这个CB当中,返回读进去几个,如果不是负一,就是还有数据,这个数据呢,我们要给它写出去,直接呢FW去做一个right right的时候呢,能不能就直接把这个C8扔进来。
05:20
上面对上面说过这个事儿了,这样的话呢,是不是就把你这里边每次五个五个都就读出来了,对这不就类似咱们刚才那会说到的这个错误的写法这一种或者是这种了,不对啊,那每次呢,应该是你读进去几个,我这块就写出去几个,那正好呢,人家这个right呢,还有一个重载的构造器啊,写个零写len这样,哎,它这个时候的这个意思就是啊,每次写出。啊,写出什么呢?叫L音一个这个字符呗,正好这L1呢,就是你正好读进去几个,读进几个我就写出去几个,哎,这挺好啊,那这样循环结束以后,当你是负一的这个文件就结束了,最后呢,这个资源的关闭,关闭的话呢,此时有两个,一个是FW,一个是F2,到底先关谁后关谁呢。
06:14
其实没有特别严格的要求,这块大家先写哪个后写哪个,其实都没错啊,都可以啊,那建议呢,就是你可以从下往上看着这样去写啊,因为回头我们还会造好多的流,流多的时候呢,有时候就懵了啊,这块你就倒着这样去找这些理就行啊,你可以先写这个FW啊。哎,Close一下,然后f2.close一下就行,那这留的关闭了行写完了这个时候比较清楚的能看到这四个步骤,那但是呢,你不能用这个拆开s close。删掉啊,现在得拆开始了,拆开始那得到这儿。包一下auto shift z try catch finally,行,然后这两个呢,就都得放到这里边了。
07:00
这两个的话呢,又得分别去判断一下这个,呃,是不是no啊,或者分别又得去try try catch这块呢,如何去处理这两个流,现在有俩了。这块写法呢,又得考虑一下。啊,有同学可能会这样写,怎么写呢,这个呃先呢,是不是做一个try catch是吧,拆开完以后这个位置呢,刚才说了,说要补一个FW不等于no。啊就就一行,我就不去写这个大括号了,然后呢,诶这个怎么处理这呢就有两种方案了。有的同学可能会想,我这个跟他一样,并列着写,就相当于是不是你这块呢?这么着是吧,把这个改成是不是F2就行了,这三条并列的写,有的同学呢,可能会认为说,嗯,万一你这个要有异常,这块我得保证执行我这整个finally。说呢,那我把你得扔到这个finally里。
08:04
这样写,那应该怎么写啊?其实呢,刚才这两种写法都OK,嗯,因为本身拆开咱们讲它实际上你要真要出现异常了,咱们主要担心的啥呢?就是你这个要真出异常了,我得也得保证他得关了,是吧?目前这种写法呢,你要出异常了,发一定会执行会关没问题对吧?哎,那其实我刚才这种写法呢,也行,你看啊,我把这个CTRLC一下上面这个注释掉,哎,我再拿过来啊,哎,刚才呢,怎么写的是这样写的,我把这个呢拿到外边这个我没写这个拆开finally,这时候你想要是你出现异常,这个能关吗?还。能呗,就是你要是FW呃,关的时候出现这个L异常了,这块它还会执行吗?会吗?会不会这就看你这个开这个理解的。
09:04
会。这咱们讲开的时候,他不是说真正的把这个异常其实已经处理掉了呀。咱们不是讲过说那个狼来的这个故事拆开不就相当于把这个狼都打死了,你后边的代码是不是还是会执行的呀,所以不影响啊,这样并列着写其实就可以了,你这个要有一长check开,这不就开始掉了吗?你这会要写个s out,它也会执行啊。那我这写个拆开,那当然这块也会接着执行呀,所以没问题啊,那当然了,你要这样写也行,就是你怎么写都可以,这呢算一个方式一,这是一个方式二。这个从语法上去分析,嗯,都OK啊写完了,那写完以后这块呢,我们就跑一下啊执行。OK,试行完以后这块呢,就出来一个hello啊,打开长这样子,Hello呢,长这样子你也可以呢,去看一下,比如我们这个打开一下这个lo啊。
10:10
回到这儿,这个hello这块,你看一下它的一个文件大小,在这儿呢,这是它的一个文件大小。两个呢,你可以做一个对比,哎这块是吧,哎没有问题,就完全呢是一个复制操作。行,那这呢,咱们就相当于把这个,呃,使用这个字符的一个输入流,输入流整个呢,就把我们这个流的一个执行过程呢,整个带着大家就串了一下啊,就串了一下啊,相当于我们现在呢,能够实现一个文件的一个复制了,文件的复制,嗯。先停一下。
我来说两句