00:01
嗯,好了同学们,那咱们接下来呢,就开始上课啊,我们呢,这个昨天啊布置了一个作业。对吧,哎,这个作业这块呢,咱们完成的怎么样呢。我看有几个同学啊,呃,这个提交了一下是吧,咱们把这个作业呢看一下啊。拷贝目录。来这块的话咱们打开。就在这儿吧,啊,然后接下来呢,咱们是拷贝什么呢。是把我们这个地盘。比如说cos对吧,哎拷贝走拷贝到哪啊,C盘下是不是,哎拷贝,那我们减一挑一个啊,我们挑一个什么呀,我们挑一个这个目录这个少这个资源少一点的,不要那么多的是不是太多的话可能也不太不太好啊,不太好来,我们只是先测试一下是不是。
01:00
假如说。来,假如说现在呢,是这个地盘的cos下面的谁呢这个。二不太合适是吧,一一。哎,这个可以。咱们就把这个叫做document的这个目录给他拷走行吗?就把这个叫D盘下的这个叫什么呢?零二加YSE。啊,然后呢,呃,这个叫做啊,这个目录咱们给它拷拷走。行吧,哎,整个这个目录给他拷走啊来那行了,各位,那咱们怎么考啊。我们新建一个class啊,这个class呢,我们就叫做copy。这个呢,我们叫拷贝什么呢?目录啊拷贝目录。
02:02
主方法呢,我们写上在这块呢,我们应该是设计一下这个程序,各位啊,我们应该是从某一个位置拷到某一个位置,对吧,所以说这应该有一个什么呀,有一个拷贝员,有一个拷贝目标。是不是啊,有一个拷贝员有个拷贝目标,那么拷贝员我们可以新建一个file啊,对不对,S r c file是不是你有这种面向对象的这种思想啊,所以这边应该指定一个拷贝员是不是?哎,拷贝员你从哪考?拷贝目标你应该有吧。对吧,拷贝原有拷贝目标有。那你调方法就拷贝就行了,对吧?哎,调用方法拷贝那肯定是这样啊,你不能说在笨方法里边去拷啊是不是,哎,那么这块呢,拷贝圆的话,那就file呗,S RC file呗,对吧,你有一个什么呀。那么你这个file呢,这个file这块跟一个路径啊。是不是要拷贝谁呀。你拷贝的是这个目录啊。
03:00
对吧,哎,把这个目录拷走。啊,拷走,然后呢,接下来拷贝的目标是哪呢?File啊file。你一个范,比如说我们就拷贝到C盘的根部录下吧。行吧,拷贝员嘛。拷贝到哪拷拷贝到C盘跟下C盘的根部路下,我这个路径应该是可以改的,将来啊应该这是动态的,这个位置也应该是什么动态的,对不对?哎,调用方法拷背景copy。Copy d行吧,把s RC file传进去,把这个目标file也给他传进去。这样的话我们就可以调方法拷贝了,那这个方法的话咱们没有啊,咱们给他,呃,这个新建一下啊,新建一下静态方法是不是,哎,静态方法这是拷贝目录的。拷贝目录。拷贝原。
04:01
是不是,哎拷贝目标啊。对不对,哎,拷贝员拷贝目标啊,那么有原有目标,那么这个拷贝应该怎么拷贝呢。我们应该是个什么样的呢?对吧,啊,就是这个思路很重要。对不对,哎,大家得得想一想,因为这个我看只有也也只有那么三四个,四五个学生啊,这个写了这个这个东西剩下同学好像都没写,所以这个东西呢,你想一想,就是我在这里为什么这样写,面向对象嘛,是不是拷贝原有。拷目标有是不是?哎调这个方法叫copy DR拷贝就行了,有原文件,有目标文件,从这个原文件往这个目标文件拷就行了。那考呗。是不是考的话那。怎么考啊,是不是第一步该怎么写呀?第一步该怎么写,怎么想的呢?就现在我们有拷贝员是这样的。
05:01
这个拷贝员下边是不是有很多子文件或者子目录啊。对吧,那我们能不能拿到这个拷贝原。下面的这个子目录呢。我们假设现在它下边是有东西的,明白吧,就假设啊,当然有没有可能就是说。我们只有一个document这样的目录,这个目录下啥也没有,这块这块是没东西的,那也是有有这个情况的,咱们现在先不用考虑那么多情况,我们假设啊,假设这个document下面是有东西的,我们能不能拿到document下面的东西呢?对吧,所以这就是你的思路啊,是不是,所以这个时候你先先去。元。对吧,下面的什么子目录。你没得写呀,是不是现在你只有这么一个思路,所以你可以调用这个s RC file,它这个方法叫lists。
06:06
那这个list files这个方法我们昨天讲过,是拿到我们当前这个文件下边所有的孩子。你现在是一个document,我现在拿到你这个document下面的孩子吗。是不是,那怎么拿呀?那就list files呗。List这个方法的话,返回一个数组,你看没。他返回了个范药数组。是吧,哎,File药数组,那拿到这个药数组之后,哎,大家思考一下,我们现在呢,先可以测试一下,就是说代码不要一直写明白吧,要测试。明白吗?测一下再往下走,你可以看一看这个files它的lengths,因为它是个数组嘛,是不是,所以接下来你执行一下,你看看。运行一下啊运行。运行一下,哎,看看这个地方,它的这个是不是五啊,我们看看啊,这是12345吗?哎有道理,那如果在这新建个文件呢,它是几呢。
07:08
对吧,那就是了呗。对吧,没问题啊,没毛病。那么大家思考一下啊,他拿到他的孩子之后啊,这个孩子啊。这个孩子你也看见了,这这是测试程序,删掉就行了啊,这堆孩子呢,你看见了,他有可能是个目录,也有可能是个文件,对吧。是不是啊,所以这个时候呢,我们可以不管啊,先不现在先不管它是个目录还是个文件对不对,那么这个时候呢,我们怎么办呀?哎,我们在这对它进行循环。循环总会吧,Fire fires。是不是每循环一次取出其中一个file对吧?哎,这个这个file可能是文件。也可能是目录。
08:00
都有这个可能,大家思考一下,这个file是不是有可能是个文件,也有可能是个目录。但不管它是个file还是个目录,呃,不,不管它是个文件还是个目录,总之它是一个file对象。是不是,那如果它是个犯对象的话,大家想想能不能递归调用呢?对吧,那这个递归调用copy d这块的话,我们能不能,哎,把我们当前的这个file传进去,把这个叫desk file也传进去,因为递归调嘛。对吧,这是第一位吗。递归调用。等于是循环的过程当中,拿出这个file之后,这个file呢,再调copy d这个方法再往下传进去。对吧,调这个方法,那么这个方法大家想一想。你下一次再执行这个方法的话,你过来有没有可能,这个它是一个。文件。你想想现在在这个位置上是不是一个s RC list files拿到子对不对?这是它所有的子,所有的子在循环的过程当中拿出了其中一个file,而这个file呢,它有可能是一个目录,也有可能是个文件。
09:10
那我问大家,那这个递归的结束条件是什么,就是我。我在这循环过程当中,我这个file传进去就调它,那我问大家if,如果这个src,它is fire。它是一个文件,就没必要把它递归了吧。对吧,你想想,你想想s stay。如果是一个文件的话。递归结束。你假如说这个list files拿到他的孩子,对孩子进行循环。
10:00
那循环过程当中拿出一个file来,这个file呢,其实就是个孩子,这个file它有可能是这个Java SE进阶。那么Java SE进阶这个东西的话,那那那上来在递归调用的时候,上来它是个文件吗?不是他还会往下继续走吧。他return不执行,往下继续走啊,往下继续走的话,那应该是Java SE的进阶这个目录下,它是不是又去调list files,然后拿到一个file数组啊。对吧,但是你别忘了,我们有可能拿到的不是加YIC进阶,有可能是新建文件文本文档,新建文本文档拿过来的话,大家想一想是不是我们在这儿。递归这个file是个目录,是个文件啊,Copy递归调用,那它是不是它是个文件吗。这就是那个新建文这个。这就那个新建文本文档啊。这个东西就是那个新建文本文档。你明白吗?就这么一个东西,然后递归调用的话,首先上来它是个文件吗?是是文件就结束了。
11:02
看见了。是文件就结束了。啊。那么大家思考一下,我们在这个for循环这一块。在递归调用之前,我们凡是在这个位置是不是就可以拿到所有的文件的名字啊?叫get absolute pass吧,这个是不是获取所有文件的一个绝对路径啊?这是获取所有文件的。当然包括什么。包括目录和文件,对吧,获取所有文件的绝对路径对不对。大家思考一下,有同学老师这个新建文本文档,他也会在这输出吗?会的。你想一想上来你这个是个document对不对,过来之后呢,在这儿呢,List files,拿到一个file数组。那对这个发数组进行循环,循环过程当中就有谁他他他他他他明白吧,把这几个就都就输出了。
12:02
听懂了吧,他都会输出。啊,只不过在递归调用的时候,我们把这个file传进去的话,这个file有可能是这个一个文件,如果是个文件的话,没关系,在这已经输出这个文件的一个路径了,啊,这个file就已经是那个新建文本文档了。新建文本文档了啊,然后呢,这个程序呢,就接着往下走,对吧。呃,应该是可以把所有的东西都拿出来,所以这块的话,我们就把这个改成放下就行了,别在这写这个了啊,来拿过来。那么我们来尝试一下,现在就这么简短的两三行代码,是不是这个拷贝员拷贝目标,还有调方法,调这个方法首先上来,如果是一个文件的话就结束了。啊,那如果他不是个文件。
13:03
他不是个文件对吧,那我调这个list的发拿到他的孩子,那他的孩子之后呢,往下走。是不是每循环一次,拿出其中一个file,然后递归去调用,递归的结束条件是什么?就是如果它是个文件就递归结束呗,你想那我再往下走对吧,它是文件呀,对吧,我这个再往下走,它是个文件呀,我再往下走对吧,它是文件对不对?哎,我再往下走,你看这是个文件吧,然后再往下走,这个作业这块,你看这里边有目录吧,它会把这个D0910再打开。再去往下找。找什么呀,找这个下边的孩子。明白吗?哎,找这个孩子,但是这个孩子呢,他没没了,他是一个什么呀,他是个文件对吧?哎,所以这块我们一起来看看啊。我们这个简短的这个程序到底好用不好用来执行。来,我们看看有没有找出我们我们所预期的,首先呢,我们document下边有个Java SE进阶。
14:00
是不是进阶下边的话,大家看进阶下边有这个有这个有这个有这个有这个有这个有这个有这个有这个。是不是都有啊,那么除了加YC进阶,整个这个递归就结束了,你看见没。结束了吧。啊,然后for循环往下继续走的时候,大家想一想,是不是除了JAIC进阶往下走,它还有javac的零基础视频,呃,零基础这个叫讲义对吧?所以下边有一个javac零基础讲义,Javac零基础讲义下边是不是有这个这个文件对吧?那javac零基础讲义这块结束之后大家看。这个结束之后回来了,是不是整进到课堂笔记啊,没有进到作业里边了,进到作业里边了,作业这一块的话,你看作业下边的子是不是都有啊。作业当中还有D0910的作业题答案,作业题答案下边是不是有这么一个文件啊。对吧,你看他的子是不是都能拿到,你看所有的子是不是都拿到了,包括这个端口下新建文本文档是不是也拿到了。对吧,诶课堂画图这块你看是不是都拿到了。
15:00
对吧,包括他纸下的纸都有拿到了啊,课堂笔记这块你看也都拿到了吧,没问题吧,哎,所有文件他都可以拿到。所以我们当前这个程序写的是非常成功的啊,非常成功的,你看这个思路是这样的,对吧,你程序可以一步一步去做原目标调方法,然后呢,如果上来就是这个圆,它是一个文件的话,那就没必要递归了。它是个文件,就没必要递归了。啊,然后再往下呢,如果程序能到这儿,这说明它不是个文件,是个目录啊,是个目录就拿到这个它的子,拿到子的话,我们对它进行循环,循环过程当中,这个file有可能是个目录,也有可能是个文件,对吧,不管是啥,我们再输出一下,输出一下对不对?哎,Copy d,如果是个文件传进去的话,下一次递归的话,这是个文件就结束了。所以我们应该在这个位置试文件,是文件的时候需要什么拷贝。对吧,哎,是文件需要拷贝,是不是应该在这里进行拷贝啊,就一边读对吧,哎一边写,但是呢,大家思考一个问题,我们这个程序啊,现在是不是应该把目录建出来。
16:06
什么意思?你比如说我现在是D盘价的cos Java SE document是不是,那你这边如果有一个Java SE进阶,那我问大家一个问题。我们拷贝过去的话,拷到C盘下的话。这个位置。是不是?应该创建一个对应的目录。这里应该有一个目录叫什么叫cause?对吧,Cos里边应该有一个目录叫什么呀,叫做零二什么Java。是不是va SE下的话,应该有一个目录叫。明白吧,这个目录应该先建出来,Document下面有什么呀?下面有什么呀。
17:00
Document下边有一个叫做Java SE进阶的这个讲义,所以你这都应该出来叫做Java SE的。进阶讲义。应该有这个东西。是吧,所以这个目录你怎么建出来呢?我们先删了吧。对吧,是大概这个意思,那你这个目录。对吧,你你对应在这儿建出来,你怎么建。你应该在哪写代码?嗯。各位,大家思考一下,想一想。想一下。啊。那这样的一个循环过程当中啊。对吧,这不就把所有的发都经历了一遍吗?是不是,哎,你可以考虑在这儿呢,你可以注释掉它这是一个测试对不对,哎,那如果说file呢。
18:00
他是一个什么?Is是个目录的话。我们是不是得新建对应的目录啊?对吧,那你新建对应的目录,你怎么建呀。新建对应的目录,你怎么建?你看它是一个目录。对吧?哎,我们输出什么呀,点get absolute pass执行一下你看。这个就相当于是说把所有的目录都拿出来了吗?这是目录,你看目录,目录你看作业下还有一个目录叫D0910,什么作业题答案有个目录是不是,哎,课堂画图,课堂笔记,我们把这些目录都建出来。只不过你有可能要把这个目录给它改成什么。对吧,我们把这个目录过来啊,大家看看。这是测试啊,我们先注释掉。
19:00
这是个目录,那你这是原目录对吧。那你的目标目录应该长什么样啊?目标目录应该把这个改成C是不是,哎,这是个目标目录吧,目标目录。但你要清楚一件事儿,各位啊,什么事呢?就是原目录和目标目录,原目录这个东西好说,我们现在已经拿到了,就点get absolute pass,其实就是目录。对吧,死终了下S2CD原目录就是这个值。那我们的目标目录是啥呢?目标目录是啥呢,各位?你这个一定是C盘吗。不一定吧。是不是,哎,不一定是C盘啊,不一定是C盘。那你有可能是F盘,也有可能后边有很多个目录对吧,ADC有可能我要把这个东西干啥呀,拷贝到D目录下。
20:04
那你是不是应该把这个目录。给它加到这个目录的后边啊。是吧,你想想是不是我们应该将来拷贝的话,应该是把这个目录直接拷走,拷到这个位置上。是不是这样的?大家思考一下。这是我们的原目录。那目标目录。怎么办?啊,我这边是没问题,各位啊,我不知道大家思路能不能跟上啊,能不能跟上,我再重复一遍,别嫌我啰嗦啊,这是这是目标,这是拷贝方法。过来之后呢,我们拷贝这个file,呃,上来我们file调list files,拿到它的数组,对数组进行遍历,遍历过程当中呢,哎,我们这边呢,就递归调用就行了。
21:00
在这儿我们可以得到所有文件的绝对路径,但是这个文件有可能是个文件,也有可能是个目录,如果是一个目录的话,大家刚才也测过了,是不是拿到这是目录,把所有的目录都拿到了,现在我们是要做一件事,把目录都建出来,这是原目录,是它,那目标目录是什么?原不是他。我们需不需要把前面那个盘符给他截了,各位。我需要需要不需要把前面这个给它截掉,因为要将来把这个东西加到哪儿啊。加到这吧。是不是要把这个东西给他加到这啊。对吧,把这个东西啊。给他加到这儿。那这样的话,我们这样做各位啊,我们把前面这个盘符给它解掉。啊,盘符给它截掉。
22:01
假如将来这边是A路径B路径。C路径。是不是将来我们是C路径啊,假如有几个斜杠。然后呢,我们把这个路径啊。从这个位置吧,开始给它放到这儿。那如果是这样的话,咱们应该是把D冒号斜杠给它截下来。那D冒号斜杠这个东西是012对吧,从三这个位置下标为三这个位置开始吧。是不是,哎,我们截一下各位啊,截一下。我们这块呢,先给它删掉,我们先输出什么呢?src.sub string,然后我们写个三。我们来看这是什么德行啊,什么德行来这块呢,我们给它改回来。
23:03
我们再去执行一下,看看这个输出结果是什么。这一次我们是不是把前面这截掉了,对吧?哎,把前面这个截掉了,各位啊,前面截掉了。那么前面这个截掉之后呢。接下来呢,我们就可以在这儿给他给定一个目标。点啊。那目标D是什么呢?是我们这个s RC d subs string3这个字符串进行一个拼接,前面可能就是个C冒号斜杠了呗。对吧?哎,那现在我们假设啊是这样的,我们来看看这个结果是不是我们想要的,来我们执行一下。嗯,写一步一步。好了,现在大家看是不是就变成这个德行了?对吧,变成这样了吧,然后我们接着尝试一下啊,那如果你这块是一个什么呀,D盘冒号俩斜杠A。
24:00
B对吧?C然后D我想把这个东西拷贝到这个目录下,你想一想这块你是不是应该就是这种路径了。你这个这个位置是不是应该就是他了。对吧,哎,得是它了,运行一下。你看。好,大家看是不是这样一个路径啊。对吧,哎,这样一个路径,所以说这一块你不能写死啊。对不对,哎,这块是不能写死的。啊,这是不能写死的,那么这一块呢,我们现在写是C盘跟下,那么我们怎么办呢。来我们这一块能不能。动态的获取呢?这个我们。他的get absolute pass。那我们来看一下执行。
25:05
嗯。好了,我们打开看一下啊,这是这样的对不对,我们回来看。这边假如说给它改成D盘的A呀B呀C呀D呀什么的,对不对,来我们执行一下。好,大家看现在这个路径是没问题吧,哎,有问题这个位置少一个。少一个东西。各位少一个东西,少一个斜杠,诶刚才这个少不少东西,我看一下啊。如果是C盘的话,哎,这就是测试对吧,得出的一个结论。是这样的,对不对。没问题吧,嗯,然后呢。我们加一个A加一个B加一个C加一个D之后。他拿的这个绝对路径,可能是这个路径就不在后边斜杠了。
26:00
是不是,哎,不带后边斜杠了。D你看后边没斜杠吗?没有斜杠啊,没有斜杠的话,咱们这样吧,我们可以给他加,无所谓啊,可以给他加,这个是一个路径,各位啊,这个路径。我们这样。判断一下呗,点aniss是否以这个斜杠结尾。如果以这个斜杠结尾,大家看看啊,如果这个路径这是desk目标,Get absolute pass是不是这个路径啊?对吧,如果这个路径是以斜杠结尾的。As with吗?是以斜杠结尾的,如这个条件为true。结尾怎么办,我们这个位置就是就是它就行了。对吧,别的情况的话,那可能还需要怎么着啊执行它,然后在后面呢,加一个什么斜杠。
27:03
加一个斜杠。啊,我们看这样做行不行,各位啊,这样做行不行,就三步运算符这个地方如果是一个路径,它是以斜杠结尾的,那就走它就行,如果这个路径不是以斜杠结尾的,那在最后呢,我在这给它加一个斜杠。对吧,哎,加一个斜杠,然后这块呢,它是一个整体,各位啊,它是个整体,你不放心的话,你可以给他加一个括号。从这开始到这结束,它是个哎整体是吧,然后接下来呢,你再去执行你这个程序,你看。它是否以斜杠结尾,不是以斜杠结尾,给它加上斜杠就行了,那如果说我直接在这里写的是一个C冒号俩斜杠的话,我再去执行,执行完之后呢,大家看这个有没有问题啊。这个是不是也没问题啊,对吧,最起码现在是说我们应该通过某一个算法已经拿到了什么呀,通过这是元,这是得到目标的一个目录嘛,是不是,那接下来我们判断一下是不是,哎,File对不对,哎new file。
28:06
那么这个new file new谁啊,New我们这个对象就行了,无所谓啊,然后因为这个呢,有同老师有没有,有没有可能会导致垃圾挺多的,没事啊,这个循环在这结束,哎,每循环一次,这个对象就释放了,没关系啊,没关系,那我们判断一下,如果new file点叫exist,如果是不存在的话,我们在这里呢,我们new file.mkdrs以多重录的形式给它建出来。看见没?是吧,啊,以多重目录的形式给它建出来。就现在呢,我们把这个目标呢,这个路径拿到了呀,对吧,你new一个fire出来对不对,New一个fire出来,New file之后new file它如果不存在的话,我们给它新建出来呀。这样的话,目录就建出来了,各位,这个所有的目录都建出来了,对吧?来我们走一个啊,走一个我们运行一下。
29:02
来瞅一眼啊。我们现在呢,应该是这个目录是怎么写的,是C盘的根,我们就看一下C盘的跟下就这啊来看一眼,走一个运行。好,我们来看看这个位置,Cos下边零二加va SE下面的一个document下面有Java SE这个讲义,然后加SE零基础讲义,还有一个课堂笔记,还有一个课堂画图,还有一个作业,作业下有个D09D10的一个作业题,答案对吧?大家看这个目录现在是不是就就建出来了?目录已经有了吧。是不是,哎,目录已经有了,各位啊,目录有了。
我来说两句