00:00
嗯,好了同学们,那接下来咱们来重点先研究一下这16个流当中的什么呀?哎,前面这文件专属里边前面这两个。啊,一个叫做输入,一个叫做输出。行吧,哎,我们把这个和这个研究一下行吧,先看这个file input stream行吧。好,那咱们就开始写代码了,各位啊,这个写代码的话,咱们在哪写呢?咱们就在这个idea里边写就行了,这个我就关了啊来大家注意看啊,在这儿呢,23这个章节下,我们创建一个新的package。各位啊, packagecom.b power node点加y.IO好了,就这样,那么这新建一个class,这个class我们就叫什么叫file test01走。来,接下来我们 ctrl shiftf12最大化,然后接下来我们在这给大家记下笔记啊,就java.io下的一个file input stream。首先第一个我们叫这个叫什么文件自己输入流对吧,万能的啊,任何类型的文件都可以采用这个流来读。
01:06
啊,输入流各位。输入流啊,叫字节输入流,字节的方式。啊,完成什么呀,输入的操作,完成读的操作。是从硬盘到什么呀,内存。从硬盘到内存各位啊的一个过程,那这个我们怎么读呢?现在我可以准备一个文件是不是。可以准备一个文件啊,比如现在呢,我在哪呢,我在,嗯,我在D盘下吧,我准备一个文件,各位啊,D盘costs cost里边啊,Java products。嗯。加。在这准备一个文件吧,这个文件我就随便起个名啊,叫temp。
02:02
就这么一个文件吧啊,没有扩展名,然后用积分打开ABCDEF行吧?啊,就这么一个文件啊,现在我要干啥要读这个文件。读这个文件,你这个文件文件路径先得拿出来吧,就这个文件路径吧,拿过来啊,来我们创建啊,首先第一步创建文件字节输入流对象,这个你创建就很好创建了,对吧,你参考这可以帮助文档找到这个file input file开始file往下找input,这个file input呢,你看这个构造方法,可以这样可以这样可以这样对不对,三个方法现在大家能看懂的呢,这个看不懂,这个看不懂,这个能看懂。那我们就先用它呗,对吧,File input dream,你看有这么一个。参数吧,这个参数应该跟的是文件的路径吧,这是负责读吗?对不对,F读你现在这个和这个看不懂咱就没关系啊,这先不用看,先看它就行了,来,那么接下来我们在程序里边应该怎么做呢?就直接呗,File什么呀,哎,Into的什么stream呗。
03:08
是不是,哎,那么new一个什么呀,Fire吧。好出来那么的这个置需要一个这个我们它来好家idea还是非常非常之大。对不对,哎,非常非常之强大,那么这个位置呢,它会自动加一个斜杠,因为我们复制的这个路径里边有一个单斜杠,那单斜杠这种东西呢。文件路径。对吧,文件。啊,文件路径啊,Idea中会自动把这个变成两个斜杠啊,会自动idea会自动把什么呀,把这个变成这个啊。因为在Java中一个斜杠转表示转移,对吧,因为Java中。
04:02
这个表示。两个斜杠代表一个斜杠啊,那有同学哎,我问大家问题,这这边为什么为什么报错呀。导包该倒倒了呀,我们看看这个方法是不是会抛异常,而这个异常叫file not found exception,它的负类是IO exception IO是它的负类是exception。所以通过这个大家可以得出结论,这个地方有异常,并且是编译是异常。对吧,编译是异常要求程序员的编写程序阶段必须对它进行处理。你没有处理编译器报错,你看是不是,你要么在这进行try catch,要么throws问方法里边我们一般会进行try catch,是不是好加一个try catch。好了,那么这是创建文件输入字节输入流对象啊,创建出来。那么创建出来之后呢,这块大家注意啊,那路径能不能这样写,就是说我不写这个斜杠了,我写这一个斜杠行了。
05:00
行不行?都可以各位啊,没问题。其实这个斜杠也是可以的啊。写成这个也是可以的。啊,以下就是这些路径啊,都是采用的绝对路径对吧。是不是,哎,以下路径以下啊,都是采用了绝对路径。的方式啊,那其实它还可以用相对路径是不是,哎,相对路径,那这个理由就有了各位啊。那有了之后呢,大家想一想,这个流最后是不是要关闭呀。对吧,哎,在哪里关闭啊。不管上面这个程序出现不出现异常,我们为了保证流最后一定要关闭,在哪关啊各位。还记不记得有个叫finally?Finally一块,还记得吧?哎,所以这块呢,加一个finally啊,然后在这里呢,你就可以关了,但是你这个关这个流,你要注意这个close方法在这调不了,原因很简单,为啥,因为我们这个在这个大括号里边,所以呢,我们这个流啊得放到什么呀,外边放到这个串一块,外边给它一个默认值空。
06:12
然后接下来我们判断一下它是否等于空if none,各位啊,快捷方式啊,If n n回车。一如果这个不等于空的情况下,我们把它怎么着,关闭一下明白吧,这有异常我们拆开就行了啊,拆开拆开就完事了啊。这是关闭流,各位啊,关闭流在finally语句块当中,确保流一定关闭啊,但关闭这个前提是流不等于空啊,关闭流的前提是流。不是空啊,不是不是空,流是空没必要关啊,对吧,流是空没必要关,流是那的时候没必要关闭。没必要关闭,这也是避免控制异常嘛,对吧,这也是避免控制异常啊,避免空指针异常。
07:09
你看是吧,在这创建一个流,指定一个路径,然后在这里关闭就行了啊关闭就行了。好了,那么这块呢,这是一个创建以及关闭,那么在中间呢,你创建好了就是可以开始读了吧,是不是开始读就行了。对吧?流有了对不对?你读呗,那读的话怎么读啊,你看看这个文档呗,发input有没有这个方法,你看方法很多,是不是有很多什么close我们已经用过了是不是?哎,你看这个read,你看从此输入流中读取一个数据字节,读一个字节,你看这个read方法对吧?从此输入流中读取一个字节。对不对?返回什么?返回读到这个字节,如果已经达到文件末尾,则返回负一。达到文件末尾则返回负一,这什么意思啊,来我们读一下各位啊,我们调一下这个f is点瑞的方法,我们发现这个瑞的方法呀,它返回一个int读到的东西啊,读到的数据啊,读到的数据,那么这个地方呢,有异常,大家看这个位置是不是有IO异常,IO异常这个东西得处理,因为你只开始了这个是不是啊,那我们可以继续往下来看,Out加回车。
08:20
你有几种方式呢?你可以加一个ADD catch,你看在这是不是加了一个东西啊,对吧,你还有另外一种方式,你看看他怎么做。嗯,在方法声明位置上加好,大家看是不是加到这儿了,对吧?哎,这都是idea工具为我们提供的,当然你还有一种方式是怎么做呢?来我们看一下说。把这个叫IO的异常换成把这个not异常换IO,你看你还可以这样做,因为你IO异常包括了这个IO异常,以及这个final not found exception,你还可以还可以这样是不是?哎,那你还可以怎么做呢?还可以在这单独写个TRY也是可以的啊,但是我们在这里单独TRY里边套了一个TRY,这个意义不大啊,所以这块呢,我们不采用这种方式,各位啊,不采用这种方式,那么我们采用哪种方式呢?哎,我们就采用这种细力度的方式,各位啊,细力度的方式ADD cat。
09:16
细力度的方式,如果是这个,我们在这里就是表示文件没找到呗。是不是,哎,文件没找到,这是细力度的一种控制方式啊好,那这样的话我们读读到一个什么东西呢?Read date,好,我们一起来看看现在这个硬盘上的文件里边有什么东西呢?哎,有一个A,是不是,哎有个A,那它怎么读的呢?我给大家解释一下啊,这个文件里边啊,它有一个这样的数据。是不是他最初的时候,它这有个针,各位啊,这个针指向什么,第一个位置的前边。他如果调这个read的方法的话,记住啊。它这个针啊,会往这个方向移动。会往这个方向移动,明白吗?会往这个方向移动。
10:03
只要你调RA,它会移动一个字节。懂什么意思吗?就说你现在这个最初的这个指针是指向这个位置的,你只要read一下,它会把这个指针挪到这个位置上。明白什么意思吗?哎,调瑞的方法,他只要是调这个瑞的方法。啊,它这个指针就会往这移动,如果你移动到这个A上面。拖拉。那就返回这个地方的字节。字节啊,A是多少,是97吧。这个A是不是97。各位。我们来运行一下。好,大家看是不是读到这个字节是97啊。对吧,哎。理解什么意思吧?这个97是这个字节的大小返回值,这个返回值是什么?读到的字节页啊,读到的字节返回值,这个方法的返回值是读取到的字节。
11:15
本身。读取到的字节本身啊,这个反馈值是这个意思。那如果说你再去调一次这个瑞的方法呢。你再调一次瑞的方法,它会怎么着啊?会再往后移动一下。明白吗?会再往后移动一下,那这个时候移动的时候,它就指向这个位置了。那它指向这个位置的话,它就相当于把这个字节拿出来呀。是不是,所以我们又读到一个数据,现在我们把这个数据怎么着啊,输出那再执行应该是98才对。他真往后移动一下呀,这次是不是读到98呀,对吧,那它一直往下读,一直往下读,他读到这儿的话,各位大家看啊,一直完移动读,读到这儿的话,它是不是九十七九十八九十九一百一百零一百零二,那这个时候是不是会返回个102。
12:18
对吧,啊,读一次两次三次四次五次六次,我们读六次来六次啊,一次两次三次四次五次六次。那九十七九十八九十七九十八九十九对吧,这应该是100吧,这是101是不是,哎,这个是102,那这个时候呢,我们正常往下读,就是读到最后一个就是102,你看见没。就读到这儿了,现在针是在这个位置上,针在这个位置上,明白吧,那如果此时此刻再掉一次瑞的方法。再调一次锐的方法,会让它这个针继续往下走,一位明白吧,继续往下走,一位走到这儿。
13:04
走到这儿之后呢,指向的这个位置啊,位置没东西看见没,就这个位置是空的,是空白,那么这个时候这个瑞的方法,它执行结束之后的返回值就是几啊,就是负一。你明白什么意思吧?哎,就是说他从这个位置上往这儿走。啊,读到的这个位置,如果什么也没有明白吗?什么也没有,它返回的值负一。所以这个时候呢,我们再去调这个方法。拿过来,最后的结果大家看这个位置就是负一。对吧,那如果说你在这里再读一次,你再读一次还是负一,因为你永远都不到了。读不到它就返回负一,读不到数据就返回负一,就这个意思。读到文件的末尾了啊,已经读到文件的末尾了,再读的时候读取不到任何数据。
14:13
返回负一,明白什么意思吧?哎,这是第一个例子,各位啊,这个例子呢,我们以后肯定不能这样写。是不是我们肯定用循环呀。对吧,用循环啊。
我来说两句