写点什么

java 零基础入门 - 综合案例 (File 类 + 递归)

作者:喵手
  • 2022 年 7 月 15 日
  • 本文字数:2696 字

    阅读完需:约 9 分钟

java零基础入门-综合案例(File类+递归)

哈喽,各位小伙伴们好,我是喵手。

今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学 习,互相学习,才能成长的更快,对吧。

我是一名 java 开发,所以日常接触到最多的就是 java 啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

一、概述

       论前几期啊,我们是分别讲了Object类Date类FormDate类Calendar类System类StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。

二、前言

​ java 零基础教学也讲了一阵子了,从 jdk 安装到第一个 java 程序再到如今的 java File 类,递归思想等,不知道你们对于此教学有没有啥建议,毕竟看着浏览量不是很可人,所以在开启此篇前,我想统计一下,是不是对我这个教学不是很感兴趣啊?如果有何不适的地方,欢迎大家提出宝贵的建议,好不好,我会采取并调整,因为我的目的也是想把这个教学做好,尽可能的帮助到更多的小伙伴,有一个好的引导。

​ 回归正题,对于上几期的教学,我们是针对性的讲解了 File 类的基础知识点及实战演示,以及递归思想的运用,不知道你们是否有掌握?如果还没有掌握透彻,欢迎回到我之前的几期文章中进行知识补充。

​ 可能有小伙伴会问了,这一期我准备讲什么呀?很简单,模拟个实际的场景,然后将这几期讲到的知识点都运用进去。

三、场景描述

1️⃣业务描述

       我最近有做到一块业务,正好跟现在讲到的知识点很接近,,于是我就想跟大家聊聊。大概的要求就是要将一个文件夹下所有人里头所对应的文件资源都搜找出来,就对于这么个业务?你们可能会说,这不就是遍历就好了呀!是的,没错,但是如果我说要你结合递归来实现,你们知道将递归的思想运用到哪上面么?如果不是很清晰可以再好好想想啊。

2️⃣分析

  1. 针对目录搜素,无法判断到底有多少级目录,所以递归就可以派上用处了。遍历所有的目录,对于是文件夹就接着递归。

  2. 遍历目录时,对获取的子文件,判断其文件名,取出符合要求的文件即可,比如只取.pdf 后缀的文件。

3️⃣代码实现

       通过上述所对场景的解析,其实代码实现就相对清晰了,如下我先给大家模拟一下场景,制造一个多文件夹带子文件的现象,然后再对其进行递归遍历。

然后对其有不同层级的进行 pdf 文件创建,也有其他后缀的文件,尽量模拟的逼真一些。

第一步:

我们直接来定义一个递归方法。入参就为一个 File 类,一个 List<String> paths。我是要将符合要求的文件的绝对路径获取并用集合存储。

其中有一点我给个提示,FilenameUtils.getExtension(file) 方法会直接返回一个不带点的后缀,比如 FilenameUtils.getExtension("test.pdf"),该方法是返回"pdf",其实如果你不用 FilenameUtils 文件工具类,你们也可以通过 String 自身提供的 substring()方法截取也行,我这里就不一一演示了。

我还是直接用封装好的工具类来处理,然后.toLowerCase()方法是将其字符串统一转成小写字母,这样的好处也是避免有符合要求的 pdf 格式的文件漏网。

好啦,我来带着你们敲一遍,后续你们可以看我写的。仅供参考哈。

具体代码如下:

 public void getFiles(File dir, List<String> paths) {
//获取子文件和目录 File[] files = dir.listFiles();
//遍历处理 for (File file : files) {
//如果是文件,判断是否符合要求。 if (file.isFile()) {
//判断是否为.pdf后缀的文件,是则将绝对路径保存到paths中 //获取文件后缀 String imageSuffix = FilenameUtils.getExtension(file.getName()).toLowerCase(); if ("pdf".equals(imageSuffix)) { paths.add(file.getAbsolutePath()); } }else{
//递归接着下钻 getFiles(file,paths); }
} }
复制代码

注意,一定要注意使用递归时,要确定递归的终止条件,而我这里就是对有限的文件目录进行遍历,遍历完了其实也就直接结束了。然后对于 file 判断,我们只需要判断该 file 是不是文件即可,其 file 也提供了 isFile()方法,若是文件,返回 true,不是文件,则返回 false,所以 false,也就是进入递归的前置条件, 然后将该 file 作为 入参, paths 接着传入。

第二步:

如上的递归我们已经写好,接着我们就需要定义一个 test 测试启动类了。我们先来创建一个 File 类,其入值直接将我们刚才创建的 Test 文件夹目录地址给进去即可。然后进行递归方法的调用。再将其 paths 进行遍历打印。

具体代码如下:

  @Test    public void test() {

//用于呈装所有的.pdf后缀的文件 List<String> filePaths = new ArrayList<>();
//创建file对象 File file = new File("C:/Users/86157/Desktop/test");
this.getFiles(file, filePaths);
//输出 filePaths.forEach(p -> { System.out.println(p); }); }
复制代码

第三步:

执行调用其递归方法后,我们来看下控制台打印结果。

4️⃣总结

你们可以看下,其打印的绝对地址,从地址上看,是不是很贴切其套娃式的文件模式,因为对于现实场景,我们也不清楚到底嵌套了几层,所以我如上演示,已经很贴近我那真是业务场景了,你们可以参考下。

​​... ...

好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。

四、文末

       教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------

发布于: 刚刚阅读数: 3
用户头像

喵手

关注

还未添加个人签名 2022.07.05 加入

还未添加个人简介

评论

发布
暂无评论
java零基础入门-综合案例(File类+递归)_7月月更_喵手_InfoQ写作社区