00:00
好,那咱们呢,就接着来讲下边这个章节的内容,下面这个呢,就是第15章叫file类与L瘤啊,注意这个章节的话呢,跟咱们前面讲的这些章节呢,其实关系又不大啊,当然跟这个异常有点关系啊,跟这些关节的话呢,就不大了,然后这呢,就相当于出了我们面向对象之后呢,又独立的一个解决具体问题的一个,呃,专题了,这个呢,我们来考虑一下,这个在内存中呢,写的这些数据啊,如何呢,把它持久化起来,这样我们就可以把这个数据呢,通过一个IO流的方式呢,写出到一个磁盘的文件当中。同样的话呢,我们可以呢,从磁盘文件中啊,把这个数据呢,读入到我们这个内存当中呈现出来啊,那基于我们的I流,我们下一章要讲的就是网络编程了,网络编程就相当于这个通过网络的方式把这个数据呢给大家传输出去,包括呢,通过网络把数据呢再这个传输过来,这呢就是网络上的一个通信了。OK,那咱们呢,先看这个第15章,这个呢叫file类与L流啊,大块来讲的话呢,相当于有两个内容,第一个呢就是file类啊,第二呢才是这个L流啊,这个发O类的话呢,其实就涉及到了我们一个类的一个使用了。
01:01
啊,那为什么要讲这个file类呢?很自然而然的,我们说呢,把这个内存中的数据啊,写出到一个文件里,这个文件呢,其实就是一个file类的对象了。啊,那从一个文件里边把这个数据呢,再读到我们内存当中,这呢,我们也需要用到这样一个对象,所以呢,我们先来谈谈这个类的一个使用啊,然后这张的主体的话呢,就是各种各样的流,所以呢,我们来看一看这一章的这个相应的一些内容啊,回到我们这块看看也行,首先的话呢,我们来讲讲file的一个使用。然后呢,接下来讲这个具体的这个流,之前啊,针对这个L流它的一个分类概述做一个描述,然后下边的话呢,就是具体的这些流了,比如说我们使用的叫fair啊,然后另外一个呢,比较基础呢,叫file out,这一下子就四个啊就出现了啊,然后呢这呢都属于我们比较基本的直接呢能够来操作文件的这样的流。这呢是这四个,这四个讲完之后的话呢,剩下这些流呢,我们其实就得看看它们主要的作用是什么了,相关的这个读和写的方法其实都是比较类似的啊,比如下边我们提到这个叫缓冲流。
02:06
啊,这个读写速度呢就比较快啊,如果文件比较大的话呢,我们就可以使用这个缓冲流了,然后这个转换流呢,哎,你看这个名字要转换,我们可以实现叫字节和字符之间的一个转换了啊,需要用的话呢,就可以用它了,然后再下边这个呢,叫做对象流。这个对象里的话呢,你看他操作的其实就是对象了。所以呢,我们可以呢实现呢,把内存中的对象呢,通过网络的方式呢,给它传输出去,或者呢,把这个对象呢,这个写入到本地的一个文件当中,给它做一个持久化,当然呢,你也可以给他读进来啊,这呢使用的就是对象流了啊,最后这个呢,就是其他的一些相关流的使用,比如说我们前面讲的system.in system.out标准的输入输出流,包括print stream打印流啊等等相关的流,我们在这儿介绍一下就行。所以这张的主体的话呢,就是从这个位置开始,各种各样的这个流的一个使用。好,刚才我们提到说为什么要讲这个file呢?因为我们操作啊,一个具体的文件把它写出去,写出到哪儿呢?得写出到一个具体的文件当中,说读进来,读到哪儿呢?读到内存里边,从哪读过来的呢?从一个文件呢读进来的,那么这一个所谓的文件呢,就是我们file类的一个对象。
03:15
所以从这个角度上来讲呢,我们也称为那叫万事万物皆对象嘛。那具体物理磁盘上的一个文件包括呢?一个文件目录,就是咱们平时所说的一个文件夹了,啊,文件也好,文件目录也好,在我们Java层面都是一个file类的对象。啊,体现一下这个万事万物皆对象其中的一个案例啊,大家可以把它当成一个素材。好,那所以呢,我们首先呢,要讲一讲关于这个file的一个使用情况啊,来回过来,我们就首先呢来说这个file类了。啊,下边就是它这个概述,包括构造器方法,就我们要讲的话呢,无外乎就是讲如何呢去造对象,哎,常用的方法都有哪些是吧,主要的也就是这样的一些操作了。行,那这块我们就开始啊,首先的话呢,我们从这个API的这个角度呢,来看一看当前的这个类哈,那这块我们就可以输入一个呢,叫做。
04:04
好,这个file的话呢,它呢是处在我们IO这样一个包下的。哎,不光这个file类,咱们这一章呢,讲的相关的一些理由啊,实际上呢,都是在我们java.io的这样的一个包下。那IO呢,就是输入输出啊,对应的相关的一些理由了啊OK行这块呢,哎回到我们对应的这个,哎mole这块,哎把它打开,第一个呢,我们这块呢,就讲这个field啊,诶第一个诶我们这一边说呢,咱就一边把这个笔记记一下啊,诶刚才呢,我们提到说这个file类呢,它呢是。哎,位于啊叫张旺点。哎,L啊,这个包下,哎,包括呢,我们说呢,本章中。哎,涉及到的。哎,涉及到的哎,相关瘤啊也都,哎声明在。嗯,声明在。哎,咱们这个a Java点二这个L这个包下啊,当然了,我们实现数据的一个读写操作的话呢,呃,除了这个包下之外呢,还有其他的包下呢,也会有一些这个流了。
05:08
啊,包括呢,还有以后接触到叫NIO啊,哎,咱们这个呢叫IO啊先说清楚这个啊这儿呢,下边呢,这些流呢,是属于比较基本的一些流了。好,那刚才我们也提到了一个事儿哈,就是这个类呢,是我们Java层面呢,提供一个类了,说file类的呢,一个对象啊,对应于,哎,我们说呢,就是比如说我们这个Windows操作系统啊,以它为例的话呢,就是对应我们Windows操作系统下的一个文件,或者是一个文件目录。啊,操作系统。哎,下的。一个文件或一个文件目录啊,这个文件目录呢,就咱们平时说的叫文件夹是吧,这样个概念了啊,所以这块呢,我就写了操作系统,没说是Windows哈,就是我们在这个不同的操作系统下都可以使用file这类也都可以写这个大代码,表示的都是同一个呃事儿。啊,所以呢,他这个跟平台呢没有关系啊。
06:01
好,那这块呢,收集这个事儿以后呢,下一个问题我们就要想看一看,说那个如何去创建对象了,来下面我们就来说一下这个事儿啊,所以呢,右键哎,我们现在去创建一个啊,关于file的一个具体的测试了,哎,先整一个单元测试方法啊,这个我们来个一啊。好,那下边的话呢,我们就说一下,诶如何去创建对象呢。诶,我们这块呢,自然而然的就是使用它的这个构造器了,回到咱们这个课件层面,诶构造器这块呢,典型的我们要说其中的三个。啊,粘过来。好,我们就来看这三个啊呃,这三个的话呢,第一个嗯,我们直接呢去newyor file里边呢,写上这个叫pass。啊说以pass为路径的一个file的一个对象。诶,所以直接呢,你就把这个文件的一个路径呢,就写到这儿就行。好,那要以这个为例的话呢,我们看一看啊,这怎么去写呢。转过来。哎,直接呢,我们就用一个具体的file。啊在这啊好在这块呢,我们说呢,让写这个路径,呃,一说到这个路径的话呢,我们就提到了哈,我们在写这个路径的话呢,有两种写法,一种呢称为呢叫绝对路径。
07:08
啊,这呢就涉及到文件的路径表示方式啊,方式一叫绝对径。啊,这个呢,其实你看这个名字呢,也能猜到这个方式二了。就是相对路径。OK啊,那什么绝对路径呢?诶,对于咱们这个Windows来讲呢,就是我们叫包括盘符在内的啊,一个文件或者一个文件目录的一个完整路径。啊,这个呢,我们说呢,以Windows为例哈。啊,以Windows来操作系统。为例。就是包括。哎,盘符在内的。呃,文件或文件目录的。它的一个完整路径。诶就是这个意思了,好,你比如说现在呢,我想表示一个文件一个文件啊,比如我这是D盘下的,诶注意正常下的,正常的话呢,我们都是一个写杠哈,比如这块假设有一个IO这样的文件目录,它下边呢有一个叫比如hello.t这样的文件。
08:09
但是呢,在我们这个Java层面呢,咱们这个斜杠后边呢,配合在一起,有可能是一个转移字符嘛,比如说这块万一要N开头的这成换行了是吧,所以这块呢,为了不让它理解成是个转义呢,我们就得是写两个这个斜杠,相当于把后边这斜杠呢,就给它再转移过来,表示呢,它就是一个纯斜杠的意思。哎,就是这样来写啊,或者的话呢,你也可以呢,使用我们这样的一个斜杠。他就没有起义了?哎,所以说这个两种写法呢,都可以啊。好,那这个呢,我就都一个是用的这个,一个是用这个啊,反正看着怪怪的,正常大家要写的话,要么就都是这样反着写过来,要不都是这样两个这样写都行啊。好,这样的话呢,我们就指定了一个文件了,这个是我用的叫绝对路径来表示的,前面呢你可以接收一下,那我们叫FILE1,诶,这就是其中的一个对象了。OK啊好,然后呢,比如说再写一个啊,我叫FILE2,我就new一个file,然后这个位置呢,哎,我就直接写了一个,比如说叫ABC。
09:06
你看我这ABC的话呢,大家首先来判断,你说我这是个文件还是文件目录呢。你就说我不知道是吧,诶是文件还是目录,其实你就看后缀就行啊。他有这种后缀的都是文件。对吧,像这种没有写后缀的呢,就是文件目录呗。你比如说这个IO,这很很显然的IO呢,就是个文件目录,所以我这写的ABC其实就是个文件目录的意思。OK啊行,然后这样写的话呢,你看我也没写盘符,所以呢,它就属于叫相对路径。哎,什么叫相对路径呢?就是相对于某一个。啊,文件。哎,这个目录是吧。啊来讲。啊,相较于某一个文件目录来讲的一个相对的啊。位置是吧。嗯,相较于某一个文件目录来讲的,呃,相对的一个位置,这个呢,我们就称为它叫相对路径啊。
10:04
啊,其实这块呢,我们对应的以前大家上上初中学的时候是吧,学了一个物理,应该学过叫绝对速度和相对速度。是吧,这个概念是有的啊,比如说我们这儿呢,是这个,诶高速公路了啊,然后呢,你这块呢,在高速公路上这个开车开车的话呢,你说开的多快呢,要70迈。一般呢,我们说的这个,或者叫70公里每小时啊,一般指的都是绝对速度了。啊,就相较于我们这个静止的地面来讲啊,这个呢,你的一个速度,那如果说这块呢,还有另外一个车。啊,这个车的话呢,嗯,开的比你慢一点,你这儿呢,说的70是以绝对路这个速度来说的,他呢,如果开的是50。啊,那你要向下它的话呢,那就剩20了。对,所以呢,就有一个相对的一个对照物。啊,参考的一个东西啊,好,这个人家要开到90的话呢,你相当于每小时你也得往后退20是吧,诶这就是一个相对的一个速度了啊。好,那么我们这里边儿呢,相对路径呢,也是它相交于某一个路径来讲的,那这块呢,我们就得说清楚,诶,这是相对于什么路径来讲。
11:04
哎,这呢,我们就得稍微的在这说一下了啊,然后呢,这个说的话呢,跟咱们使用的开发工具啊还有点关系,所以呢,我们这这块呢,说清楚是idea当中啊。哎,在idea当中说呢,如果使用单元测试方法。你看这还不一样啊,如果呢,你要使用单元测试方法的话呢,我们说这个相对路径呢,是相对于咱们当前的Mo来讲的。哎,当前的这个module。就是我们当年的模块来讲啊,但如果说呢,你要是使用的是咱们的main方法。哎,使用我们这个may方法哈,它呢,就是相对于咱们当前的工程来讲呢。哎,也是我们当前的叫project。哎,相对于他来说的好,那大家你看啊,我现在这个ABC呢,咱们也没有说物理磁盘上现在有,我就是随意的写了一个,它是相当于咱们Mo来讲的,那如果我要把这个呢,给它创建出来,就相当于咱们当前这个mole来讲的,也就是在它这个下边,我呢右键如要去new一个来具体一个director,这个director就叫做ABC。
12:11
哎,回车一下。哎,就是如果让我现在把它对应出来的话呢,就是对应的是它了。前提来说,我现在使用的是单元测试方法。哎,如果要使用may方法的话呢,就得是在咱们当前的这个工程下边右键我去new一个具体的directory,这就文件目录的意思。哎,一个对应关系啊,这块呢,大家注意一下,诶,或者有同学可能会想说我怎么证明这个事儿是吧,证明这个事儿呢,其实也很简单,咱们一会儿呢,会讲个方法,提前我们可以用一下啊叫get absolute pass。我看一下他把当前这个所谓的相对路径呢,我改成是一个绝对的一个路径。是吧,哎,我看看你这个长什么样子,来,咱们走起一下。你看这呢,是不是就咱们在当前这个Mo下了是吧。哎,没问题,行,那这块呢,如果大家你想看一下说这个V方法,这个咱们也可以写一下,把这个代码呢,原封不动的,你CTRLC咱们粘过来。
13:05
啊,这个呢,名字呢,假设就叫他了啊,我们这时候把这个may方法呢跑一下。哎,你看这个呢,是不是就在当前的工程下ABC了。所以这个呢,大家也不用刻意的去记啊,你就知道呢,说不太一样就行啊,实在要忘的话呢,你直接调一下我们这个方法看一眼其实就可以了啊。好这呢我就把它呢给注释掉了啊啊,那再来说啊,你看我这呢写的叫ABC,我把它改成这个AB,包括大家你刚才看我们这个main方法也一样,我并没有在当前的工程下呢创建这个文件目录,那我们刚才在运行的时候,包括这块你改成叫AB啊,包括呢这个位置我D盘有个IO下有个hello,那我看一下我这个D盘下。有没有这个L。对啊,打开啊,实际上是没有这个文件目录的,我这也没有隐藏啊,那既然没有的话呢,我们首先呢,想一个事儿,那会不会运行的时候呢报错呢。哎,其实呢,我们刚才运行没方法,不也看到了吗?我在当前的功能下呢,我也没有个ABC,诶实际运营的话呢,你想发现呢,其实并没有去搞错哈,那这个怎么理解呢。
14:11
对,这个呢,就是纯粹呢咱们内存层面的一个对象,那这个对象的话呢,它对应的有一个死锥形的一个属性了,这个属性呢,就表示它的一个位置,这个位置呢,就指明了是在某一个位置上,那至于说这个位置上有没有呢。那得看你后边要不要做操作了,比如我要从那个文件里边读数据啊,这时要没有他就报错了。所以暂时的话呢,我们这儿其实就是内存层面的一个对象而已。所以呢,他就不会报错啊。咱们说的什么呢?是我们创建的这个内存中的对象呢,通常呢,会让它对应在磁盘上的一个文件,或者是文件目录。那这个要没有的话呢,那就是纯粹是内存层面的对象了。啊,这个小细节呢,大家关注一下,好,这是我们说其中的一个构造器,然后接着我们再看这个啊,CTRLC。啊,我们这儿呢,比如说再去在这儿吧,再新建一个哈。
15:02
这个话呢,就是以这个路径啊,在它的这个路径下,我们再创建一个子文件,或者叫子文件目录。啊,举个例子啊,你比如说哎,这个我们先。直接扭一下是吧,然后这个位置的话呢,比如就写成叫D盘的冒号下边有个IO。哎,逗号一下,然后在它下边呢,假设我放一个叫ABC.t。哎,就是以这个呢为一个。呃,它的上层的文件目录,然后这个呢,就是这个文件目录下的一个具体的文件。啊,这儿呢,我们如果用一个fair一来表示。这呢就还是一个文件了啊。然后我接着再来。FILE2,哎,我去你一个file,然后这个parent的话呢,其实我们也可以呢,用相对路径嘛。没问题是吧,比如说呢,我就还是写了个ABC,然后这块逗号一下,然后这个位置呢,我写了一个。A12。诶,你看没有后缀,这其实又是个文件目录了。
16:01
那这个文件目录呢,是在这个文件目录的下面创建了一个新的文件。诶,在我们这个Windows操作系统下呢,凡是呢,大家你看到带盘符了,这就表示呢,是绝对路径。是吧,哎,如果没有带这种盘符呢,就是相对路径。Windows为例是吧,你要是这个Linux的话呢,它就有一个具体的这个斜杠,这就表示的是绝对路径的写法了,没有这个斜杠呢,就相应的相对路径的写法。啊,有一个这个区别啊。行,绝对相对啊,这两个词呢,大家体会一下。啊,这个像这个咱们学这个政治的时候呢,也讲过这种绝对和相对是吧,像马克思讲这个唯物辩证法。嗯,对,你像马克思这个微攻辩证法确实是太牛了,是吧,你很难驳倒他啊,他说这个世界上没有什么绝对的东西啊,你说他好吧,他说也有不好的时候。你说他不好吧,他说也有也有对的一方面,你说你怎么驳倒他这个观点。是吧,他从来不说这种绝对的话。啊,当然呢,就说了一个啊,马克思讲这个哲学的时候就说了一个,说运动是绝对的是吧。
17:03
他就说了一个绝对的,但是呢,马上又补了一句,但是也有相对静止的状态。是吧,你看这句话一说就极其严密哈,说运动是绝对的,确实啊,不停的都在运动啊,那这时候呢,有人可能就揪这个观点说。既然运动是绝对的啊,然后有一句话说,人不可能同时踏入同一条河流,说这句话对还是不对?这个这个其实算是对的是吧,它就不可能塌到通江河流,但是呢,有另外一个场景,你比如说呢,这个呃,昨天的话。啊,这个我借了你1000块钱。啊,今天的话呢,你找我要,对昨天的我已经不是今天的我了,是吧,你找昨天我去要。啊,这个呢就不对了,这叫夸大了这个运动的绝对性是吧,所以呢,它其实还有相对静止的状态,那你还是你,你得还我钱是吧。OK啊,诶,所以说这个绝对相对的话呢,这个这个你永远驳不倒哲学家是吧。好,那么这个拉回来哈,绝对相对这个呢,大家要区分清楚啊啊没有说呢,绝对的就好,相对的又不好,这个呢,看具体的问题,大家呢去具体做选择就可以了啊。
18:08
那就我们刚才写的这个格式来讲,前面这个。来注意前面这个的话呢,一定是一个文件目录。是吧?这个我们在这儿说明一下啊。咱这个参数一。啊,这个参数音呢,这不叫parent嘛,它呢一定是一个文件目录啊。啊,那我们这个参数二。诶参12的话呢,这个就不一定了啊呃,它呢可以是一个呃文件,也可以是一个文件目录啊。啊,也可以啊,是一个文件。这个目录啊,这个呢,就主要呢,大家就看这个后缀就行啊,看有没有后缀。好,这呢就是我们说的第二个,然后呢,我们再来看这个第三个哈,诶CTRLC一下。那第三个比如我就,哎还写到这儿了啊。
19:00
哎,这个第三的话呢,它这个第一个参数你发现它变了,前面这个是string这块呢,变成个file了,然后后边这个没有变。诶,其实呢,跟上面是一个道理哈,上面是在这个文件目录下呢,我们有这样的一个文件或者目录,这个呢,也是在这个文件目录下呢,有这样一个文件或目录,但是只不过这个位置呢,它是以一个file的方式呢呈现的。你比如我们上面这个FILE2呢,其实是个目录了,那既然如此,我其实呢,就可以去new一个具体的file,然后我把这个FILE2呢扔到这就没问题,然后在这个A12这个目录下呢,比如来一个ab.T。这儿呢,我放了一个文件,这里边儿这个参数呢,仍然可以是个文件,也可以是一个目录啊。哎,就是这样的,然后呢,你这个范二的话呢,如果是一个文件啊,像这样的,那就肯定不对了。你不可能在这个文件下边还放其他文件啊,诶这个注意啊,所以这里边儿呢,针对这个参数二,我们说呢,它诶是一个文件目录,那这个参数一的话呢,它也一定是一个文件目录。当然呢,这块呢,只不过是以一个file的方式呈现的,上面呢,是以string的方式呈现的,仅此而已。
20:05
行这呢,我们就关于这个构造器呢,其实就说清楚了。OK啊好,那这块我们回过来,诶,关于这里边儿呢,提到一个叫绝对径啊,相对路径这样一个概念啊,这个呢,咱们得清楚。OK啊。好,这呢,我们把这个事呢,给它粘过来啊,CTRLC。哎,这么着一下。诶,行了啊,CTRLS这个构造器呢,就我们刚才提到了,一共是有这样的三个,这三个呢,算是我们比较常用的,哎,当然呢,根据实际情况呢,你看具体的场景下啊,你选具体的哪一个啊就可以了啊。哎,构造器呢,咱们就说到这儿了,下边的话呢,我们看一看这个file里边常用这些方法,这些方法的话呢,咱们熟悉一下就行了啊,因为呢,我们后边呢,在使用这个相关的一些练习的时候,是吧,可能会用到这个具体的file的方法,包括呢,我们在这个讲下边这流的时候呢,也可能会用到它的一些方法。
21:00
所以这些方法的话呢,其实也不少,咱们就熟悉熟悉啊,我呢再写一个文件呢,咱们去看看都有哪些方法啊。好,那方法的话呢,直接从我们这个课件里边啊,咱们呢,就一波一波的给他拿过来熟悉熟悉啊好,首先呢,第一波CTRLC获取文件和目录的基本的信息。诶,CTRLC一下。哎,这样啊。赶过来。哎,看一下这个情况啊。这里边呢,有这样的一些方法啊,Get get absolute get absolute。那这块我们就写一下了啊,这个写的话呢,其实咱们给大家呢,举例子的话呢,你看我这块咋写啊,因为实际情况呢特别多了,你比如说我们这块呢,调它的呢,可能是一个文件。也可能是个文件目录。
22:00
是吧,哎,然后呢,这个文件或文件目录呢,可能是绝对路径,也可能是相对路径。是吧,然后这个文件或文件目录可能存在。我指的存在是物理磁盘上啊,可能存在,也可能不存在,他们在调这些方法的时候呢,体现出来的特征啊,都会有所区别。啊,咱们就不能一个一个的都给大家演示一遍了。你像我刚才说的,哎,文件还是文件目录这两种情况了,这个哎,绝对路径和相对路径这一种情况,存在的不存在的,这就六种情况,再乘以一下这里边儿的多种方法。这就多了去了。是吧,太多了啊,所以这块咱们就挑出来其中的两种情况呢,比如说给大家说一下就行啊。好,比如这块呢,我们先写一个相对路径表示的一个文件吧,哎,我这叫hello.tst。那这个文件的话呢,目前呢是不存在的是吧。不存在的,那咱们就先不存在测试一下,一会儿我再给大家创建一下,咱们看看。好,这块来一个一。有了啊好,有了以后的话呢,我们就直接调这个方法,这些方法的话呢,你看它都是有这个返回值的,那不妨呢,我就直接打印了啊。
23:05
一点这个get一个name。这块一共是。七个是吧。七个啊好,下面这个呢,叫get pass。Get absolute pass。啊,Get absolute。Get parent就基本上有些方法,我们看这名字的话呢,大家也猜的差不多了。行,那先把这个呢,我们先run一下。诶,这块我们看到它相对应的这个效果啊,哎,我们把它稍微的也盯一下。好来看一看啊,我get name的话呢,就是获取那个文件名,文件名就是叫hello加T啊获取的路径,因为呢,我这呢写的是一个相对路径,所以呢,它呈现出来的也是一个相对路径。那这块呢,就明确说呢,我要看你的绝对路径了。哎,你的绝对路径这单元测试方法真的就在当前的Mo下的。哎,没问题,Get absolute file啊,注意这块你会发现呢,跟上面这个四五打印的结果一样。
24:05
但是呢,它的其实反制类型是不一样。就是这个呢,相当于是把我们当前这个file呢,转换成是一个以绝对路径来显示的一个啊file的一个对象了,只不过呢,我们这个file呢,你再去打印的时候呢,又自动的调这个file的图方法。诶,然后返回的一个字符串呢,跟上边这个诶看似是一样的,诶,但是它的类型有区别啊,然后get呢,就是获取它的上一层的文件目录了。哎,你会发现呢,这块是个nor。那怎么整成闹了呢?哎,因为我写的是个相对路径是吧,那如果你想看到呢,我们,哎,它返回的是这个。那就是实打实的你的上层文件目录了。那怎么办呢?哎,这个呢,其实我们就可以呢,先把这个FILE1,因为你可能是个相对路径的啊,我现在get absolute file是吧。哎,这时候你还是一个file,然后我再去get这个parent,是不是就能拿到它的上层那个文件目录了。
25:02
哎,对的啊,你看这我们再去run一下。哎,这不就把他给拿到了吗。哎,没有问题啊,行。然后呢,下边这个length length就是长度的意思啊,就是你占多少个字节呀,诶那不好意思,你现在这个文件呢,不存在啊,你会发现呢,不存在呢,它也没报错,它就是一个零。OK,然后呢,叫last modified,就是你最近的一次修改的这个时间,这个mod呢,就是修改的意思了,哎,我们也不存在,那也无所谓修改不修改了,所以呢,都是零啊。好,这块我们演示呢,相当于这个文件呢,就不存在,现在呢,我把这个文件呢,给它造出来啊。造出来的话呢,注意它在当前的这个module下,放别的位置呢,也识别不出来啊,我新建一个file,我就叫做hello点诶T诶放这了啊,这让我写个ABC123保存一下。OK了啊好,保存完以后的话呢,我们再去做一个执行。诶看这里边有哪些区别啊,前面呢,这都没没变啊,这个呢也没什么变化,这闹的也没变化,这是如径好这块呢,你看有六个字节。
26:08
ABC123各自占一个字节六个嘛,然后这个呢,就是我们所谓的last modified这样的一个时间戳。那拿那个new data包一下,是不是就出来那个具体的年日十分秒了是吧,那这个我就不包了啊好,这呢是我们对应的这样的一个文件啊,它的这个场景我们看到的一波操作啊,那我把它呢在CTRLC咱们复制一份啊。这个我们叫二了啊。哎,这么着这块的话呢,我们整成是一个绝对路径吧,绝对路径呢,这块我们就哎拿到我们地盘下,比如我就在下边呢,创建了一个叫IO。诶,这样的一个目录,这个目录下呢,咱们整一个吧。其实整这块呢,我们可以是个目录也是吧,比尖就是叫L1吧。不以这个目录为例啊,这个目录下边呢,暂且我们什么也没放。好这块呢,大家要写的时候,你也可以这样哈,我就直接呢这样CTRLC。
27:03
哎,回过来。这儿呢,我就以一个绝对路径的方式表示一个文件目录吧。然后呢,我们把它呢,再去run一下。嗯,看一下啊,Get name啊,这时候name呢,就纯是你当前你不是个文件目录吗?你的名就是它没有前面的啊get pass这块,因为你写成个绝对路径了,所以呢,我呈现出来了也是个绝对路径。Get absolute啊,那你绝对那还是是吧,Get absolute以绝对路径方式来显示当前这个本身它其实就是,所以的时候还是这个样子,哎,Get parent,你的上一层用绝对路径的写法呢,或许上一层是没有问题的。啊,然后呢,这个你在get absolute file啊跟你不去get,其实也本身就是啊,所以get parent还是能拿到的,然后呢,这个文件目录。啊,注意哈文前目录这个length的话呢,是零。你同志那零本身你这块你也没放东西是吧。哎,那等一下咱们放一个东西。
28:01
啊,比如这个我叫ABC啦,然后这个里边我们打开啊,也来个ABC啊,保存一下有三个字节啊。好,那这个时候的话呢,先看一下后边这个啊,因为这个文件呢,文件目录呢是存在的,所以它就有这个时间戳了,这个时间戳呢,其实就对应的就是我们你看这块,诶回到这儿啊,他这块不是也会想个时间吗。啊,这个是Windows呢自动显示的啊,咱们这个文件目录呢,创建的时候,包括你后期还修改过,它也会记录你最近一次修改的时间啊,类似于我们Java里边呢,就掉了一个方法一样。好,现在呢,这里边儿我放文件了哈。啊,这是大家你看。诶,我明明放了一个文件,这时候的话,你发现呢,调了一个文件目录呢,它的LAS是不是还是零。所以这块大家注意点啊,就是文件的话呢,我们调LS呢,你要是文件存在呢,就能够计算你的大小了,你要是个文件目录里边可能还有很多的文件或文件目录,这个调LS呢是不行的。算不出来的。诶,这个你要想算呢,这个倒确实也是一个合理的一个诉求是吧,你比如说我们现在的这一章,这是一个文件目录了,我右键一下说我看看这个文件多大呀。
29:08
哎,这块就给我们算出来了,这个呢,它不是说调一个方法就行了的。哎,需要呢,你里边呢,去做一个累加的操作了。啊对,这个呢,具体呢,就是诶这里边儿,诶把这种文件呢加起来,文件目录里边呢,还有你就再打开里边呢,再去把这种凡是文件呢都累加起来,文件目录呢再去里边再找。所以这呢,其实是一个递归的操作。啊,才能够实现咱们在这个客户联习题这块呢,其实有这样的一个需求。啊,咱们现在还没有讲到那么多的方法,所以暂时还写不了啊,那咱们再看看下边这些方法都有哪些啊。好,这个呢是咱们呃,L1这个文件目录呢是存在的,你也可以把它改成这个文件等等啊,下边让大家去操作一下啊,但是基本上的话呢,这几个方法的作用呢,也比较清晰了。啊,就这样子的好,这个呢,是我们说的这个算是叫第一波的这个方法了。
30:00
这个往这儿放一下吧。其实还挺多的啊,好,接下来我们再往下看。哎,这块啊。A ctrl c。好,回到这个位置啊,咱们接着往下啊。好把这个呢粘过来,这个呢对应的方法叫什么叫列出目录的下一级。哎,这个操作啊,这个呢叫list。返回值呢,是死顿类型的一个数组,这个呢叫list files,返回的是一个file类型的数组,区别呢,也就是返回值类型不太一样了。那既然能调这个方法啊,很显然我们调方法的对象应该是一个文件目录吧。因为我要看他的下一集嘛。既然有下一级,是不是一定得是个目录啊?哎,对的啊,好,这块我们来做一个测试啊,哎,那这呢,我们就得创建一个,它得是一个目录。目录,那比如说咱们回过来,咱就以这个,诶以这个为例吧,啊,CTRL一下啊。
31:06
好,回过来这儿呢,我CTRLV啊。有点长啊,这个呢,就是一个我们的绝对路径的一个表示方式了。然后呢,回到这儿,诶我呢,就通过这个叫F一点,我那叫list。诶先这么着啊,这个例子的话呢,它返回的是一个死string类型的这样的一个。哎,数组啊,这呢就是我们下边这一层的这个啊,这呢我写成是一个AR吧。下面咱们做一个报循环啊,磁质类型的S,也叫file的一个啊A。哎,这个我们打印一下啊,这个S。好,它呢,其实就列出来了,我们当前这个文件目录的下一层的这个文件或目录。诶,你看这块就列出来了啊,这块列出来的这几个啊,看我们盯一下,回到咱们这个位置来看,诶这边是你看123456啊,我这呢,123456,哎,你上面这几个呢,属于叫文件目录,下边两个呢是文件都能够给我们列出来。
32:06
相当于呢,就把你下边这个对应的文件或目录的一个名呢,就给我们返回了,以死针的方式啊存储。啊,这就是他啊,然后呢,它还有这个方法。啊,这个方法呢,就是反物质的这个类型呢,就有点儿区别啊,而是它了。好,这个我们就换一个行是吧,然后在下这块我们还是通过这个叫F一点,我们的叫。哎,调这个方法啊好,这个呢,就是一个false了,这个的话呢,咱们也可以去做一个便利啊,我也用这个增加符号循环吧。哎,这么着,哎,咱们直接打印一下这个F啊,其实你这样打印的话呢,是调他的这个图方法了。哎,其实这块我们要看的话呢,显示的其实也是一个名是吧。但是这个类名的话呢,诶,我们上面也是以绝对路径方式写的,所以这块你看显示的时候呢,是不是也是以绝对路径方式显示了。
33:00
哎,就这样。哎,如果你要觉得太长的话呢,你不行,你就直接盖这个name得了。咱们上面就看的这个文件,或者文件目录的一个名。哎,那其实跟我们上边这个就一样了是吧。OK啊。啊,这个看你个人了啊,就是你看你想怎么去显示,刚才呢,我们演示了一下,诶是这样个情况啊。这呢对应的我们叫list falses,那平时呢,在开发当中,根据实际的需要,你看你想调的是哪一个方法。比如说刚才我们说了个需求啊,刚才我们想看一下当前这个,呃,文件目录呢,它到底比如说多大,咱们得往里边去遍历了,哎,变历里边呢,可能还是一个文件目录,还得再往里边走。实验了是不是就要用?对应用的归纳是不是就要用这个方法了?你讲我要找到当前这个目录下的这个所有的文件或文件目录。那这个file的话呢,如果是文件,你就算是它的大小,它的文件目录呢。再掉它是吧。哎,这不就依次就递归进去吗。
34:00
这个呢,是咱们说的这个叫,诶第二波的这个方法了啊,对应的呢,是这两个啊CTRLC。哎,这个咱们给他也这个就站到这儿吧。好,接着我们再往下看啊,这个呢叫重命名。重命名。哎,这个我们搂一眼啊。嗯,给一个文件或者是一个目录啊,给大家做一个重命名。但是一般的这种重命名,咱们可能针对的都是文件要多一些啊。这个我们比如来一个四。现在的话呢,我想把这个文件呢,我们禀明一下。我明明一下,那这块呢,我们看有什么要求哈。呃,比如说我现在去造一个FILE1,哎,我去new一个具体的file。这么着了啊?那这个FILE1的话呢,诶,不妨我们刚才写了一个hello嘛,哎,CTRLC一下我就粘过来了,这是用相对路径呢来表示的。然后呢,我们现在比如说再来一个叫FILE2,哎,我去new一个file,这呢,我就写上D盘下的L下的假设呢,它下边。
35:04
看一下啊。嗯,它下边呢,我们来一个叫ABC点。哎,T吧。啊,就以它为例啊,那现在的话呢,我们其实就想调这个file一点叫name to这个呢不叫FILE2吗。哎,他这儿呢,还有个返回值是个布尔类型的。相当于呢,就是告诉我们是不是改成了。啊,相当于是一个叫呃,Rename,咱们写个叫success是吧。哎,是不是呢,改成了。啊,这个比如我们去打印一下啊,现在这个CTRLCCTRLV来个问号,这个呢叫啊修改成功。国家重命名成功。啊,这个呢,我们叫失败啊。那重命名失败啊。行啊。嗯,好了,这呢,我们就写成这样了,然后的话呢,这块大家你看一下哈,我们要想保证这个方法在调用的时候呢,希望它返回的是个处。
36:07
第二题呢,就是希望你改名成功了,这块呢,我们说有什么要求。哎,这会儿我写一个这个举例啊,比如我们这呢,用这个FILE1,咱们去调这个叫a rename to,我把这个FILE2呢,就扔到这儿了,是吧,我们说要想此方法执行完。返回处。啊,要求。这个首先法一呢,它得必须存在啊。相当于你这个文件呢,你得有。啊,然后且L2呢。File药二呢,注意它得不存在,它要存在的话呢,我们往这走,这个有一个出名的,它不会说呢,是覆盖了啊,诶fair药一呢必须存在,且我们这个file药二呢,是得必须不存在是吧。同时啊,如果你这个FILE2呢,你看我这写成是一个绝对路径了啊,这个绝对路径呢,还得要求你这个不在的话呢,但是你上一层的文件目录呢。
37:06
你得在啊。VM目录要不在的话呢,他也不会帮你去创建这个目录的。那就又rename失败了是吧?且FILE2呢,必须不存在啊,然后且FILE2呢啊。所在的这个文件目录是吧,需要呢。存在啊。那要求还挺严格的。那在咱们这个题目当中,我这个hello呢,是不是也在我写的叫ABC123了。好,然后呢,我们再回过来。哎,然后呢,这个位置呢,ABC.t呢,也确实呢,也不存在,哎IO呢,哎也在好这个时候呢,我们这三个条件呢,都都具备了,然我们再去做一个run。看这就是成功的,成功以后呢,你会发现呢,我们当前这个位置呢,就没有这个hello.t文件了。哎,然后你再回到我们这个位置呢,它叫ABC.tt了。打开以后是不是就刚才那个内容。OK啊,就是这样的情况啊,当然了,现在这个场景下的话呢,他已经不在了,他现在已经存在了,这个rename呢,肯定就失败了呗。
38:05
哎,没问题是吧,行,哎大家呢,可以体会一下啊。OK行,那比如说这块我们可以做什么样的一个操作呢?啊,这个呢,呃,举个例子啊,你比如说。啊,你像以前呢,我就做过这样的事儿啊,比如说这个呢,是咱们上课讲的这个视频啊,随便我们打开一张,这不讲了这么多东西吗。比如这么多东西呢,我想前面呢,加一个前缀。比如说前缀叫上位骨下划线,然后呢,01020304,哎,其他都不变哈,给所有的这个文件呢,都加个前缀。其实呢,我就可以使用咱们刚才讲的这个一些方法去做了,比如说这块呢,是一个文件目录是吧,我把它这个文件目录呢,通过刚才咱们讲的这个list files。是不是就把每一个文件就找到了。啊,每一个文件找到以后呢,这个文件呢,它本身是存在的。我还把它保存在当前的这个文件目录下。啊,然后呢,我起名的时候呢,我就起上一个带前缀的了,我1RENAME是不是就都改名了。
39:01
哎,这不就一系列的就都操作好了。是吧,就可以使用我们Java的代码呢,可以去实现啊,大家你也可以在下边跑一跑演示演示是吧。好,这呢,就我们使用这个rename啊。嗯,把这个我们先。这么着一下啊。CTRLC啊,这个咱们粘到这儿。OK啊好,接着来看下边要判断功能的方法。嗯,到这儿啊,CTRLC。回过来。啊,回到这儿。这个下一波啊。哎,粘过来啊。嗯,看一下这叫判断功能的方法。嗯,比如第一个啊叫exists,这个时候呢,就是判断我们当前这个file呢,它所表示的文件或目录呢,是否实际存在,这个实际存在就是你物理磁盘上呢,到底有没有。前面呢,我们有一些方法呢,其实呃,有些操作呢,其实不存在呢,也没关系哈,诶但是这块的话呢,它就在判断你到底存不存在,下边说你是个文件目录吗。
40:04
你是个文件吗?是吧,你能读能写吗?你是不是隐藏的呢?那就这样一个基本的操作了。啊,这是我们来一个叫TEST5啊。行,这个呢,咱们就跑一下啊,做一个演示。那这个FILE1啊,你有一个具体的一个啊。好,那这一块的话呢,我们比如说就拿刚才说的他为例吧,CTRLC这个文件呢,目前是存在的。嗯,OK啊,那我们就直接呢来调这个方法了,都是波尔类型的直接打印啊,还有一点叫exist啊,直接呢我们再复制一共是六个啊。Can dress it。嗯,好,这就可以了啊。像我们知道这个在Windows操作系统上呢,我们有些文件呢,是可以给它隐藏的是吧,隐藏以后呢,就是说你是不是隐藏的。啊,然后呢,文件呢,我们也可以给它设置成叫只读的。
41:02
是吧,你不能改是吧,就是这样一些行为,诶,那对于这个文件来讲呢,目前啊,我们也没做过这些操作,所以它都是一个默认的情况啊,说文件存在吗?目前是存在的。是个文件目录吗?不是,是个文件吗?是。啊,能读能写隐藏吗?能读能写没隐藏。是吧,哎,就是这个情况啊。好,呃,这块呢,类似的,你可以给他再做一个替换是吧。这个比如说我们把这个事儿呢,CTRLC一下啊粘过来,这块呢,我们叫二。然后这块呢,我们把这个ABC呢,就给它去掉了啊,这就是IO嘛。哎,这个IO的话呢,目前也是存在的。啊,刚才我们是在这个D盘下的IO是吧?诶就以这个IO目录呢为例啊,它也是存在的,我们跑一下。啊,这个对呢,是咱们下边的这一波了。诶就他了是吧,说你这个存在吗?存在是文件目录吗?是是文件吗?不是能读能写没隐藏。
42:05
哎,这样的情况好,我这叫IO的。白哥。Lo吧。诶,目前呢,不存在这个IO这个文件目录。哎,不存在的情况下呢,来,走起。全是副词是吧。诶,就是当你要是不存在的话呢,你是不是存在呢,不存在了是文件啊,还是文件目录啊,这块他根本都不给你判断了,全是false。所以呢,我们在做这个相关的这种判断的时候呢,通常的话呢,你都得是存在了它才有意义,否则的话呢,这块就全程false了啊。哎,这个注意一下就行啊。啊,不用刻意的去记录辣椒。行这呢是我们这一波啊CTRLC。哎,我这样讲的话呢,大家能有个印象啊。好,然后接着我们再来看一下下边这个操作啊,越往下方的这个操作呢,就越,哎。丰富一些是吧。创建和删除的一些功能。哎,这个呢,也是咱们也算是这个最后一波的一个操作了啊。
43:06
好看一下。这个呢,涉及到了我们对应的这个文件或者文件目录的一个创建和删除啊,比如说第一个你看呢,就是关于文件的一个创建的啊,叫create new file,比如说上面我们这块说你这个,呃,文件,这个文件存在吗?不存在,不存在,那我就给你创建一下。是可以这样的去理解啊,然后呢,创建是文件的操作了,删除文件呢叫delete,然后创建文件目录呢叫make d或者叫make DS。啊,这个S呢,就是一个负数的意思了。那怎么叫复数,等下咱们说啊,然后文件目录呢,它的删除也是delete行为。所以一定要delete呢,就删除了啊这块呢,注意一下这个删除的delete呀,咱们是不走回收站的。啊,删了就真的没了,就跟我们在这个idea当中啊,你说我这个文件不要了,我来个delete,手一抖删了就没了啊,也不走回收站啊,这个咱们都清楚,嗯,这是一个,然后另外的话呢,就是关于这个文件目录的一个删除。
44:04
要想删除一个文件目录。你得保证这个文件目录下边呢,不能有任何的东西。就是这纯干净的一个东西是吧。那你要想删除一个有内容的一个文件目录,比如说我们这个IO是吧,我想把它删了怎么办啊。对,你得先找这个目录,我得调list files找到这里边了,凡是文件呢,是不是调delete就行。那他要是个文件目录呢。在。然后呢,这块呢,如果是文件呢,删掉,如果还有目录。再立files。呃,直到呢,你找到最底上了,呃,这个把这个文件都删了,删完以后呢,回过来这个文件目录呢,就没东西了。你再调delete就能删掉了,文件也删掉了,再回过来它才能够删掉。所以呢,就是一个递归。OK啊行,咱们这个呢,练习三就是练这个事儿的啊。好,然后这块我们看一看这里边儿的基本的行为啊,这个是TEST6啊。
45:04
好,那这块呢,咱们先说一下这个文件吧。文件呢,比如说FILE1啊,这个我们去一个file。这个呢,我们就来一个,比如说地盘下的还下的。啊,来一个hello.t啊行,首先呢,看一下我们盘L下没有点T文件。哎,那这时候呢,我们,哎先比如说一点调这个叫exist是吧。啊,这呢就判断你是不是存在的意思了,加个if是吧,这呢,如果加个非。就是如果你要不存在。哎,是这意思是吧,好不存在的话呢,我们就调一下咱们这个方法。啊,CTRLCCTRLV点叫create。哎,New file,哎就表达了啊表达话呢,这哥们还有一个异常是吧,咱们就把这异常呢,比如就抛一下了,那叫L异常。就相当于我们创建的,其实呢,就把这个相关的这个路径啊等等的哈,你也得写入到具体的磁盘上,我们得造这样的文件,这呢其实也涉及到数据的这种传输行为了,呃,可能呢,就是没成功啊。
46:08
哎,也可能呢,哎成功了,所以它是有不同的可能性,所以这块你看还有一个布尔类型的值哈,说布尔类型的。那叫is succeed。啊,这么着啊。好,If啊,说if如果啊,Is succeed。这个我们就说叫创建成功。那OK啊行,那他有可能比如说出现相关的异常,这种情况呢,他肯定就成功不了了啊。哎,所以这块呢,你看它叫create new file这块return成功怎么着呢,说呢,你当前这个首先这个名的这个文件呢,它得不存在啊。不存在的情况下,而且呢,还成功创建了它的返回值。就是个出。啊,你还不能在,哎,我们刚才这块判创建了,就是判断了不在的这个情况了,然后去创建的啊。
47:02
然后这块呢,我们要写个else呢。哎,就是这个叫哎。说此文件已存在是吧?好,这块呢,目前不在,我们走一下。诶说叫创建成功,好,我们再回到这儿,诶这不是哈,点T就给我们造好了。我要再执行呢。哎,就执行到这儿了,说此文件已存在是吧。OK啊行,那你一存在,咱们顺带呢,比如再测试一下,你要存在的话呢,我把这个f1.2,我就做delete了。就删除了是吧,说他诶叫文件删除成功。哎,这样的啊。加一个双引号啊。诶这么着啊好,但是这个比例的话呢,你看它这也是个波型的,就是相当于它也有删除失败的这种场景啊,所以严格来讲的话,这块其实你应该判断一下是吧。
48:01
就是这块我CTRLX啊,比如我要是这样写的话呢,我把它扔到这儿来一个这样。然后后边呢,来一个冒号。啊,文件删除失败。哎,是不是这哎失败。这样是不是也行,CTRL的加个L啊好,这块呢,我们现在这个文件呢,是在的,我们走一下。哎,这就文件已存在,然后文件给删掉了。哎,删掉了,然后我再跑一下呢。啊,就上面又创建了是吧,然后再跑一下呢,又删了是吧?行啊也知道这意思就行啊好,这呢是我们跟这个文件相关的啊创建删除。这样的两个操作啊。哎,这个呢,是我们来来测试文件的。哎,它的一个创建。诶,它的一个删除好,然后呢,下边我们来看这个文件目录啊。嗯,文件目录,嗯,还是呢,举一个我们以绝对路径啊,比如说来表示的这样一个结构啊。
49:01
嗯,这块呢,我们是IO下啊IO下。回过来啊,这有个L1。啊,咱就不管它了啊,我整一个叫L2吧。啊,以他为例啊,那此时这个L2呢,是不存在的。然后呢,这个IO呢是存在的,在这种情况下,我现在要创建一个文件目录,其实主要指的就是IO2了。那么这个时候呢,我如果去调这个叫make DR和这个make drs它俩呢,其实没有区别。就是你只要他俩的任何一个都能成功。我指的是什么呢?就是这个你要创建的那个目录不在,而它的上层目录是存在的。啊,他俩呢,都可以啊。嗯,比如说这块我去点这叫make DR吧。啊,就创建了是吧,然后我就直接这样操作了啊。好,这块呢,没有任何这个信息的报出来,所以咱们这块呢,是有一个波的形式的啊,诶我们一接收直接咱们看结果就行,那这个L2呢,是不是就创建好了。
50:02
这的啊哎,那同样的话呢,如果你把它改成比如说I3是吧,这个我们用make克DRS啊也是能够成功的,这个咱们这么着一下吧。诶,我把它呢,诶复制一份啊搁到这儿,然后这个我们叫二啊,这叫二这个加个S,这个呢,我们叫个三。嗯,这个呢,咱们顺带呢,就直接给他也打印一下了啊。哎,我把刚才这个二呢,咱们删一下。你看我删掉了啊,重来咱们跑一下啊。那这个就都是处了。哎,就是各自呢,创建各自的,一个是二,一个是三。哎,这呢是OK的啊行,那什么时候他们会有不同呢。啊,这个是个出。哎,这是个出啊对这块呢,我们出的前提在这说一下啊。前提呢,就是我们这个地盘下的这个。呃,IO这个文件目录。诶存在是吧,然后呢,这个IO2或咱们这个IO3这个目录。
51:05
那是不存在的,那这是我们要创建的,其实就是L2和L3了。哎,这个它俩都是除啊好CTRLC一下,我们再复制一份,这个我们叫一个八了。这个怎么着呢,嗯,这个呢,咱们比如说嗯,我这样啊,回过来我把这个二跟三呢删掉吧。啊删了啊好再回过来,然后那个L2呢不在L3呢,也不在,我在L2下面。哎,下面我再创新一个IO。嗯,是。然后IO3下边再创建个叫IO5。啊,你看这时候啊,注意我们这时候呢,这个目录是在的,然后I2呢不在,L3也不在,这个不在也不用多说四跟五了,那肯定也不在哈。那么这时候呢,如果是make drr跟DS就有区别了,它呢,只负责创建I4,但是它的上层目录不在了,那我就搞不定了。那我就是false了。
52:01
啊,但是你呢。哎,它的意思呢,是复数的意思,对,如果要创建L5不在呢,哎,L5的上层目录要不在的话呢,我就一并呢创建,包括这个L如果都不在,我也一并帮你创建。你就说那个要是这个盘符没在呢,那就不要吃了哈啊,没有那么大的本事啊好,那这块我们来走起一下啊。你看下边这个,上边这个是false,下边这个呢是出,相当于我们下边这个呢,就是成功了啊,所以呢,回过来诶,你看这个IO3下边IO5它是在的啊,你这个IO2呢和IO4呢就不在。哎,所以这个呢,就是复数的意思。哎,上的目录不在啊,一并创建啊。好,那这个delete的话就是删除的意思了。哎,删除的话呢,咱们刚才也看到了这样的这个场景了啊,再来一个这个九,比如说啊。针对于咱们这个目录。现在我写一个叫一是吧。嗯,这个呢,如果我们现在点一下FILE1,我想做一个delete是吧,那就删除了啊,咱们直接看一下成功与否,这个表示删的话呢,就是删你这个L5的。
53:09
啊,那个L5的话呢,里边也没东西嘛。没东西的话呢,我现在要删是不是就能成功了。哎,走起。哎,看这就是出啊啊,这要是出的话呢,回过来你看一眼,这不就删掉了吗。嗯,那比如我这块呢,我把这个L5呢,咱们再给它弄出来啊。又给大家创建了啊,创建好以后的话呢,假设我现在要删这个叫I3哈。L3里边呢,其实有个L5是吧。来,走起一下。你看是不是就false了。说明呢,就是三里边儿有东西,有东西呢就删不掉。哎,就这个意思,哎,要想删掉的话呢,你得先把三里边的东西呢,先立a files。把里边呢,一个个都删掉之后啊,它空了,然后你再去删才可以啊。好,这呢,咱们就把这些方法呢,就都过了一遍,其实呢不少啊。
54:01
准确的说呢,应该还是挺多的啊。诶,这个呢,我先这样啊,CTRLC把它呢也。哎,这个我们也粘过来啊。好,这些方法呢挺多的,大家呢就熟悉一下,哎,我刚才呢是把这些呢都过了一遍,哎,我过一遍呢,大家其实也不一定下边非要过了,哎我过的过程当中啊,其实每个方法什么意思呢,大家其实也心里大概有数了啊,能有个印象,然后呢,你可以做一下我们相关的这个勾联题,哎,看看呢,能不能使用这些方法呢,完成一些需求啊,首先呢,我们来看第一道题。说呢,创建一个与hello.t文件在相同文件目录下的另外一个名为ABC.t这样一个文件。OK啊,这个说的还是比较清晰的啊,直接呢,我们开始做这样的一个需求。啊,这个呢,写错名了啊,Shift加F6啊。Shift加F6。哎,零一啊。好这块的话呢,我们去做这样的一个需求,写个main方法呀,也可以是吧。嗯,这块的话呢,我们就从内存层面把这个对象呢,给大家造出来就可以了啊,如果你想说诶磁盘上呢,再把它也创建出来,你就调一下我们下边讲过那个create new file就行啊,这呢我们就看成是内存层面的一个需求了。
55:14
这呢有个FILE1,诶我们去new一个file,诶这个位置的话呢,用相对路径啊,绝对路径啊都可以啊,比如说我这块呢,我就写成是一个叫相对路径了,哎,此时的话呢,我们可以通过这个file一点,咱们叫get absolute pass,诶看一下它的一个绝对的路径的一个表示。那目前的话呢,因为我用的是这个main方法了,所以呢,是当前工程下,诶这样的一个路径。好,那么现在话呢,我们实际上就想创建一个呢,叫ABC这样一个文件呢,它也在这个路径下。啊,我们看这个事儿呢,怎么做呢。首先的话呢,我们这个FILE1第二啊,如果呢,此时我们去调这个get parent的话。啊,我们做个打印,因为呢,你是写的相对路径啊,我们要是get的话呢,你会发现呢,它得到是个no是吧?诶咱们前面也测试过这样的需求了,所以呢,我们必须得放一点叫get absolute。
56:04
哎,找pass不行,Pass呢是个string了,你就没办法再去调get parent了,所以呢,我要调这个哈,Get absolute file,结果呢还是个file,然后呢,再去找到它的上层那个parent,诶这样的话呢,我们就把这个hello.t它的上层的目录呢就拿到了。然后基于这个目录呢,我们再创建一个新的文件呢,诶这个事儿呢,我们就好做了啊把它呢处理掉这块我们就相当于啊去诶FILE2这个file呢,我们去new一个具体的file,诶刚才呢,我们诶通过刚才这样的一个操作哈。咱们不就得到一个get parent了吗?啊,Get ctrl一下,其实我们就可以放到这儿了,是吧,以它呢为一个文件目录了,然后下边的话呢,我们再去放,具体的叫。ABC。诶,点T这样的一个文件呢就可以了,好,那么这个FILE2呢,我们去get absolute一个pass。诶打印一下,我们看一下,诶跟刚才这个FILE1呢,诶你发现呢,就是在相同的一个文件诶目录下。
57:01
那这样的一个思路就可以了。行,这呢,就咱们这道题的一个具体的做法。啊,稍微的体会一下啊,核心这个操作呢,其实就是这个操作啊,这个呢,我们把。哎,刚才的这个需求是吧,诶称为那叫获取这个FILE1的。啊,绝对路径。啊,绝对路径。啊,然后呢,这个获取此诶路径的这个上层文件目录。诶,这呢,就我们这道题目的一个核心操作啊,就过了,好接着我们来看这个第二个这个题目,第二题目是这样的啊,说判断指定的目录下是否有后缀名为点gpt的文件,如果要有的话呢,就输出该文件的名称。哎,下边有个提示,提示的话呢,就是你可以用这个方法,也可以不用这个方法啊,诶我们这个题呢,其实有多种写法,好这呢,我们开始写一下这道题。哎,这个我们叫零二啊,这样的一个操作了。好,这块的话呢,我形成这个单元测试方法吧。
58:01
诶需求呢,我们把它列到这儿。说在判断指定文件目录下是否有后缀名为点GP格式的文件,有呢就输出,那这块呢,最好我们先整一个文件目录哈。哎,比如说我们就要这个D2了,还我去一个具体的一个file,诶这个目录下呢,最好你是有一些点GP格式的一个文件的哈,来我们回过来啊,找一下我自己电脑了啊。我这呢也有好多的图片是吧。打开啊。嗯,好多是吧。呃,有一些呢是GP格式的,有些呢是这个其他格式的。那这个是吧。昨晚喝多了,不知道发生了什么是吧?啊。看不懂是吧,嗯。好,这里边儿呢,有好多这个GP格式的这样的文件,哎,我们把这些格式的文件呢,给它打印出来啊。这块的话呢,我们就取这个路径。啊回过来,然后呢,CTRLV啊站到这儿考虑这个路径下呢,你看有哪些文件呢,是点GP结尾的。
59:03
哎,这呢,我们就可以第二点,咱们有一个叫list的一个方法。哎,去调这个例子的方法,这个时候呢,我们就得到了一个,诶,它的下层的文件或者是文件目录了,啊,这是历史的一个。哎,比如我们这个呢叫哎。诶,但是这块注意呢,它是个死论类型的哈,那我们下边要做的事呢,就便利一下你每一个子文件或者子文件目录的这样的一个名称了。啊,比如我们这个叫at least这个。诶进去啊,那这里边的这个S呢,就是我们这个子文件或者子文件目录的一个名称了,那其实我们直接if就行啊,S点那叫ends with是吧。哎,看看你是不是点JPG格式结尾的,那如果要是的话呢,咱们把当前这个S呢给打印一下就可以了。是吧,那这样我们做一个打印就行了啊好,我们做一个。你看这时候就出来了,其实好像诶。啊对,没有别别的格式的啊行这块好像也看不出来说。
60:04
有没有打全了是吧,但至少呢,其他这个没有啊,不是JPG格式的话呢,没打出来这个倒是啊。啊,其实这个问题不大了啊,呃,这呢相当于我们的一种写法啊。这个我们比如说叫这个方式一吧。诶把它呢,我们再注释一下啊,然后这样呢,我们调了一个方法叫做list啊,它呢直接呢,就把这个子文件或者子文件目录呢,对应的名呢,都保存在这样一个数组里了,这块的话呢,其实还有一个方法,这个方法呢,咱们就没有呃去讲这个方法了啊我们接着这道题的话呢,可以把这个方法呢稍微的说一下。这个呢叫方式二哈,它这给我们提供的方法呢,叫做list,咱们刚才用的也是list,诶这个呢,我们在里边呢,去加了一个条件判断哈,它这儿的话呢,直接你可以在list的过程当中啊,就可以做一个过滤了。啊,这个filter的意思就是过滤的意思哈,针对于我们这个file的一个名称做这个过滤,所以呢,我们可以呢,把这个两个这个操作呢,类似于呢,就是合并在一起一样啊。
61:04
好,我就可以这样了啊,第二呢,点我们第二题叫绿色方法,我就用这个了啊。这个话呢,我们就需要呢,去提供一个叫filter name啊file name的一个filter啊点进来。啊,这个跑到这儿来了啊,我们这块呢,就直接在这写了啊,我就虐一个具体的叫file name的一个filter了,你看它是个接口是吧,提供一个这个接口的匿名实现类的一个对象啊,直接呢就回车了。就到这儿了。啊,这个能跟上吧。嗯,好,然后呢,这是一个接口,我们需要呢,把这个方法呢,做一个重写了哈,它这个什么意思呢,就是返回的是一个布尔类型的第ID呢,就是你这块返回,如果是个处的话呢,我就呃要你当前的这样的一个。呃,值是吧,把这个值呢,还放到我们当前这个词锥形的一个数组里边了,就是它得到了其实还是一个这样的一个数组啊。它还是这样一个这样的数组,这个数组里边放的呢,不像前面这样没有任何条件啊,子文件,子文件目录全都能把它名放到这里边儿,而我们这呢,只要你返回是一个处的。
62:04
那咱们呢,其实想要的呢,就是只有呢,你这个死文件或者文件目录的后缀呢,是点gpt的是吧。哎,那就洋一句呢,就是比如类似于我们刚才这样的场景哈,如果呢,我发现呢,注意这时候这个name其实就是我们这个子文件或者是文件目录了。然后在这写一下啊,内即为子文件或子文件目录的名称。那这时候呢,我们这个子文件或者子文件目录呢,我就直接呢点ends with,我看你是不是这个点PPT是吧,如果是呢,我就成一个出了。哎,否则的话,嗯,这块我们就return一个false了。哎,就成这样了。啊,就这么着了是吧,那既然这么着的话呢,那其实也没有必要非得写个if else了,我直接呢就return一下你当年这个name呢,是不是ends with这个GPG,哎,这就相当于一个简便的一个写法了,是吧?好,你要是的话呢,我就返回这个处了,我就把你放到我们这个词钝形的数组里边,不是的话呢,我就不要了,所以这时候我们得到的这个词锥形的这个数组里边呢,存放呢,自然而然就是我们点TPT结尾的了啊。
63:09
比如来一个for循环啊,String s。哎,还是叫list这个files啊,这呢你就不需要再去做判断了,直接打印S呢就可以了。哎,这个呢,就是我们的算是第二种一个写法啊,接着这个呢,稍微我们提一下这个事儿。还是这样的一些啊。好,然后这里边儿呢,有个第二啊,这个第二是谁呢。啊,这个第二呢,其实就是咱们这个第二。啊,就咱们这个文件目录啊,调用这个历史的这个调用者啊,诶你要有其他的一些需求的话呢,你也可以在里边呢,是使用它,咱们这里边儿呢,没用着啊。好,这呢就我们说的第二道题,然后呢,我们来看下这个第三题,第三题呢是这样的啊呃,这有两个拓展,呃,上面呢有个基本的练习,这几个呢,都涉及到这个递归的这个操作了。上面这个呢,说便利指定文件目录下的所有文件的名称,包括子文件目录中的文件。一直呢到最底层,我们说呢,这个文件目录呢,其实也是一个树形的结构了啊,如果这呢是一个文件目录下边的话呢,它可能是这个多分叉了哈,可能呢是一个具体的文件了,这就是相当于叶子了啊,也可能是一个具体的一个目录,诶目录的话呢,你再往下呃,再去做这个延伸啊,可能是这个又是文件的啊,也可能是这个目录的啊,再往下去延伸就可以了,他这里边呢,希望我们打印的就是具体的这样的一些叶子了。
64:25
相当于就是文件的名称啊,这呢,我们就需要不断的去递归,一直走到最下边这一层,然后把文件呢打印出来,哎,他这呢,把这个诶方法的声明呢给我们抛出来了。来我们直接呢去新建一个啊。零三。好,这呢,比如我写成单元测试方法了。哎,做这样的一个需求啊。把这个往上提啊。好,做这样个需求啊,他说让你写这样的一个方法,诶CTRLC一下。哎,放到这儿啊,哎,这个file的话呢,可能是一个文件,也可能是一个文件目录啊,那这里边我们就判断了,说如果你这个file呢,哎,相当于叫ISA file说呢,你要是一个文件的话呢,我们就直接打印起你当年这个file的这名就行了。
65:14
或分之一呢,哎,就直接get一下是吧。说那else。二化呢,就相当于你是一个文件目录。是吧,哎,或者这块你加个else if给大家写的完整点也行是吧,诶第二意思叫directory是吧,你要是个文件目录的话呢,我们这时候干什么事啊。他是个文件目录。诶同学,那我就判断一下里边是不是还有子文件或文件目录是吧?哎,这个呢,你就只管不用判断了,只管呢去调这个就行啊。只管调呢,我就调这个list了,这里边儿的话呢,呃一个呢是呃list本身啊,这呢是一种操作了,还可以呢,叫list files,区别呢就是它的反制类型不一样,我们应该调哪个呢。应该聊这个是吧,因为它的下边呢,可能还有文件目录是吧,所以我们就直接调它返回的话呢,就是一个诶下边的子文件或者子文件目录构成的一个数组了。
66:11
然后呢,这里边儿呢,可能有文件,也可能有文件目录是吧,那我们下边要做的事呢,就便利一下它。哎,False是便利的话呢,你就取出来它里边每一个子文件或者子文件目录了,接着呢。哎,接着是不是就递归了。哎,我就直接呢,再调这个方法,把这个iPhone呢扔进去就可以了。啊,比如说我们这个呢,有三个啊,有的人说呢,我这万一要一个也没有呢,那就这块直接放循环就结束了呗。诶,你要是有三个可能是此文件,也可能是目录啊,也可能是混合的,我就把每一个都取出来,你要是其中俩是文件,是不是就直接呢,再调它就。交这个就都打印了,你要其中有一个是文件目录呢,呃,你再进去以后呢,找到你这个此文件目录呢,再去找它的内部。就可以了。啊,这个呢,我们就这样来去写就行啊好,这个写完以后呢,我们在这块呢,去传一个啊,比如说这块这个file啊,你有一个具体的一个file。
67:08
好,这呢,我们就把比如咱们当前的这样的一个。哎,这个,哎这个章节的行哇,这个下边其实也。也不少是吧。啊,也不少啊行,这个我就放这儿吧。啊,挺长啊好,这个放在这以后呢,我们下边呢,就调咱们对应的这个方法啊,CTRLCCTRLV粘过来,哎,我把这个file呢往这一扔。好,这时候呢,就开始做这个递归的一个操作了。啊,这个还是挺多的啊,你看。啊,英语里边我们放了一些这个第三方的一些这个炸包了啊OK行这呢就是我们这个方法的一个实现。嗯,OK,好,这个时间关系啊,这个我就写了一个,剩下这两个呢,我就不特意的去写了啊,剩下这两个的话呢,对应这个答案呢,我就写到这儿了,哎,大家呢,你可以下来呢,自己试着写一写,比如说我现在是把它们都遍历出来了。这电话呢,我希望呢,就是删除,所以呢叫删除指定文件目及其下的所有的文件。
68:03
就像咱们说的哈,你得一层一层往里走,一直找到最后的那个叶子一样是吧,然后呢,再一层的从里边再往外呢去删。那才可以啊,所以这个删除的行为,咱们稍微的看一眼啊。诶删除啊这块还不是这个删除的这个我们看这个是吧,这个呢叫删除指定的这个事儿啊。首先的话呢,我们把这个放进来,先看你是不是个文件目录。呃,你要是一个文件目录的话呢,诶,把你下边的这个所有的子目录呢,先列出来,编列一下,然后再放在里边,接着去考虑这个操作了。啊,如果你要是个文件呢,哎,是个文件没有进入这个操作,直接到这儿就删掉了。哎,说这块怎么不加个else呢,因为你要是个文件目录的话呢,最后你把整个里边的东西删完之后,你自己也得delete头嘛。哎,所以这块呢,我就没有特意的写成一个else里边,因为if呢也要最后做这个事儿。啊,其实比较简单是吧,这样就行了,然后呢,我们要是想计算指定文件目录的大小呢,也是哈,诶在这里边儿呢,我们先定一个这样变量,如果你要是文件的话呢,直接把你的长度就付给size了,你要文件目录呢,有一顿呢去遍历,遍历的同时呢,这里边呢会返回你的一个大小,然后再累加到我们这个size上面,最后把它返回一下就行。
69:14
OK啊行,这个大家呢,下来可以有兴趣的去写一下,那整个呢,关于咱们这个file呢,诶咱就告一段落了,那通过我们刚才这个讲的这些方法,包括呢,做这项课后的练习题,诶这块呢,其实我们还发现啊一个什么样的特点呢。诶,大家你看一下啊,我们目前呢,讲的这些方法挺多的啊,那么大家回忆一下,有没有涉及到我们去读写文件内容的这样的方法。比如说你里边到底存在什么信息。其实没有是吧,所以这块呢,我们说啊说这个file类中啊,然后呢,声明了。啊声明了,比如说这个像新建。啊,我们的还有什么呀。嗯,删除。还有呢,我们这个叫,诶获取名称。
70:03
哎,获取名称或者呢,我们相应的这个重命名。诶等啊方法是吧,并没有涉及到对文件内容的读写操作。啊,你包括呢,我们这里边儿涉及到文件这块呢,具体的也就有一个,比如说获金到底多大了是吧,里边文件呢到底多少,然后呢,你最后一次修改时间啊,这呢都是一些面上的这样一些操作啊,然后具体这个深入文件内部的一个主页操作呢,是并没有的。啊,那我们说呢,说要想实现文件内容的一个读写。啊,我们。哎,就需要呢使用啊,我们叫IO流。OK啊,就需要呢,使用L流,也就引出了我们接下来要讲的这个流的内容啊,另外一方面,我们既然重心呢是讲L流,为什么还要讲file呢,那这我们也提到了哈,说这个file类的这个对象。它呢,通常。啊,是作为。
71:01
哎,咱们说呢叫IO流,诶操作的,哎具体的文件的这种,哎端点出现的。啊,断电什么意思呢?比如我们要是一个读进到内存中的一个流,把这个数据呢,读到我们这个内存当中,那这时候我们这块这个file呢,就是一个起点。你要从内存当中把这个数据呢,写出到一个具体的文件中了,这就相当于是一个终点。哎,所以这块我们就诶说的是一个端点,那怎么体现这个端点这样一个概念呢?哎,这块我们在实际呢,写程序当中啊,诶我们相当于代码层面。那相当于呢,我们将file类的这个对象。哎,作为参数传递到咱们IO流。L流啊,相关类的构造器种。啊,这个呢,就表示呢,我们造的这个流的这个对象,它的这个端点呢,就是你当前这个file类的一个对象。就这个意思啊。好,那就相当于我们具体要操作这个文件的话呢,得去用流了,File呢,就是面上的这样一些操作。
72:04
这个呢,其实核心的点还得是用流啊来去做这个事儿啊,这呢其实就像大家平时这个学习也是一样啊,就是你一定要深入到这个代码层面去操作。啊,有同学呢,这个一到晚自习呢,去这个这个写代码的时候呢,就是把这个格式呢调一调是吧,嗯,记记笔记是吧,然后呢,课件呢看一下,然后格式呢不对了,改一改格式完整这个面上的功夫是吧,整的挺好看的,不写代码肯定不行啊。哎,就是你还是一定要深入到代码层面去做这个事儿。OK啊,这个国家层面也是一样了是吧,这个以前跟美国关系呢挺好啊,美国把这个制造业呢,都外包给中国了,那中国呢,就是做一些低端制造是吧,做一些面上的事儿,现在呢,中美关系不太好了,你发现呢,这个核心的一些东西呢。是吧,可以去限制了,那我们这块必须呢,得自己去造芯片啊,自己呢去做研发才可以啊,这点才是实打实的啊。
73:01
好,那这块呢,我们就自然而然的就引出了关于这个file的,呃,关于L流的一个使用了,那下边呢,我们就来讲一下这个L流啊。
我来说两句