您的位置:首页 > 其它

File类,列出当前指定路径下的所有内容,目录中包含的目录不关心,递归打破肘挚,学习

2017-10-15 19:48 316 查看
file中有个list可以列出当前指定路径下的所有内容(当前路径下还有目录就不关心),形成一个字符串返回出来,还有一个listfiles,和前面的list的功能是一样的:列出当前指定路径下的所有内容(当前路径下还有目录也不关心),形成一个file对象返回出来

没错一个是形成字符串,一个是形成file对象,看自己需要什么了,通过这两个可以做到过滤功能,怎么做到呢?实现java.io.FilenameFilter 或是java.io.FileFilter 这两个接口,重写里面的方法。

在这两个接口中重写的写明白过滤的条件,通过true和false返回,这两个方法根据条件判断后哪些被过滤哪些不被过滤,和那个集合工具类的排序有异曲同工之妙。

他们同时也都像equals一样,这些东西,由系统做不合适,因为每个人需求不一样,且不同的需求组合,系统做能类似,还不能保证满足我们需求,如果系统做了,一堆方法,看着也很烦,虽然不用记。不过若是系统这么设计,不同类不同方法将会使得大家眼花缭乱。

我们讨厌这么完美的语言,因为这样会非常麻烦。于是系统又站了出来,折中,你们写条件,我做过滤即可。我之前就在想啊,条件我给都给你了,你为啥还要做?我条件写出来了,在敲一敲我自己都写了。

后来我转念一想,你做和我做不都一样吗?代码能有啥区别,最多你速度快点,再不济设计更巧妙,但很多基层代码让我们做,大家都是循环有啥区别呢?

所以啊,你做我做都一样,反正不同做法最后终点兜兜转转都一样,你做了更好,因为在我不知道的地方比我更优秀,所以我也不纠结了,你们做了就做了吧。还省事,

当然这个想法是我自己猜测的,或许是有其他原因的。后期若是发现他们存在一些正真用处会更新。

在下一个问题,又列出当前目录下的所有内容,你们配合接口做到了过滤功能。噢,一个接口是file对象和字符串,一个file对象,看自己需求是什么,比如是判断后缀,字符串名字就有用了,如果是其他file就有了,不同需求实现不同接口。

当然你还是会发现,然并卵,因为一个方法就够用了,不过大概申请2个方法做到更多选择,虽然最后可能走的是一条路,人性化一点嘛。list是得到当前目录下的内容,子目录 不管怎么解决呢?

通过递归:思路如下,先传递file对象指明路径,问是不是文件,如果是就直接打印,这种情况也是有嘛,直接传文件的路径,else就是目录了,不能直接开始循环。

list列出所有内容,交给数组。比如是数组a先问a是否为null,为什么?a不是对象吗?它不能代表所有目录,对象肯定不为null啊,你想的没错,那是你还不知道后面是怎么操作的。

继续,在系统中存在禁止访问的目录,禁止访问的目录返回的是null,和null比较判断,来得出这个目录是否可以访问,如果可以访问,循环这个数组对象,取出第一个,调用自己这个方法(递归)。

注意需要用file对象来接收,我为什么会单独提出来说这个,因为这个就可以解除刚刚的困惑,为什么用数组对象去比较。

首先,你现在取出第一个,然后方法自调了。假设也不是文件,是一个目录,这个时候又list获取里面的内容,好,如果这是一个不能被访问的文件,这时候这个数组对象list得到的是一个null。知道吗?

所以,才立马询问是否为null,来判断是否给你继续递归,为什么呢?因为你如果先递归在询问,null在过去,也是null在继续递归,会没完没了直接死循环。

所以是先询问在递归嘛,这个题,并没有什么调用系统方法能直接取出目录中包含目录在包含下去直到取出问题,而是自己做了一个,用递归,当取出第一个目录中所有文件时,又开始取第二次,以此类推直到取出所有文件。他是通过你指定的目录下的所有目录,还一层层的往下取出。

在谈论如果传入的是文件路径,那么即会直接打印文件,第二种:如果在递归中找到最下面的文件,那么他会直接打印文件,如果又包含文件又包含目录的目录,也不担心,打印了文件,就该到你目录了。

下一个作业问题:其实最开始我是做到死循环,当时我出去弄东西,回来也是在累了也没休息,继续思考,头疼,我当时根据我的想法,我绝对应该是没问题,可是却陷入了死循环。

我就扫了一眼老师的代码,我发现他这个if在外面,我这if在里面,当时也累了没有仔细静下心,不然怎么会没有发现?当时我就改过来了,我就思考啊,我还没有思考到和这时写博客一样的推到了问题的出现。我当时就是有了概念了,就是快发现问题了。

所以啊,写博客,并不是别人口中的没趣,而是他没有尝到甜头,也就是:不够坚持。我也是用的愈久才发现写博客有助于思考,现在我不写贴代码,逐字讲解。

尽量不要选择网上直播教学,因为水太深,但我就在网络直播学习,线上是有好老师效果也会特别好,学Java,我认同凯哥学堂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐