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

一、概述

        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️⃣总结 

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

二、本期教学目标

三、正文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/523902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis操作数据库(1)

前言 在应用分层的学习时, 我们了解到web应用程序一般分为三层,即Controller, Service, Dao. 之前的案例中, 请求流程如下: 浏览器发起请求, 先请求Controller, Controller接受到请求后,调用Service进行业务逻辑处理, Service再调用Dao, 但是Dao层的数据是Mock的, 真实的数据…

JavaWeb后端——Mybatis

概述 Mybatis&#xff1a;Java程序来对数据库进行操作&#xff0c;一款优秀的持久层框架&#xff0c;用于简化JDBC的开发 SSM&#xff1a;SpringMVC、Spring、Mybatis 快速入门 步骤2&#xff1a;注意数据库连接的四要素 application.properties&#xff1a;springboot 的默…

pytorch 演示 tensor并行

pytorch 演示 tensor并行 一.原理二.实现代码 本文演示了tensor并行的原理。如何将二个mlp切分到多张GPU上分别计算自己的分块,最后做一次reduce。 1.为了避免中间数据产生集合通信,A矩阵只能列切分,只计算全部batch*seqlen的部分feature 2.因为上面的步骤每张GPU只有部分featu…

布隆过滤器详解及java实现

什么是布隆过滤器&#xff1f; 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种数据结构&#xff0c;用于判断一个元素是否属于一个集合。它的特点是高效地判断一个元素是否可能存在于集合中&#xff0c;但是存在一定的误判率。 布隆过滤器的基本原理是使用一个位数组…

【STL学习】(4)vector的模拟

前言 本文将模拟实现vector的常用功能&#xff0c;目的在于更深入理解vector。 一、前置知识 在模拟之前先对vector的结构和常用接口学习&#xff0c;有一个大致了解。看源码&#xff0c;本文参考的源码是SGI版本的stl3.0。 技巧&#xff1a; 看源码不要一行一行的看&#xff…

Severt

severt是让我们自己写一些类,然后把这些类给加载Tomcat中&#xff0c;后续Tomcat收到HTTP请求(来自于浏览器)&#xff0c;就会执行到咱们上面写的代码.从而通过这些代码,完成一定的业务逻辑. 创建项目 此处创建的是一种新的项目的形式称为Maven项目,Maven是Java 中的一个的构建…

libVLC 音频立体声模式切换

在libVLC中&#xff0c;可以使用libvlc_audio_set_channel函数来设置音频的立体声模式。这个函数允许选择不同的音频通道&#xff0c;例如立体声、左声道、右声道、环绕声等。 /*** Set current audio channel.** \param p_mi media player* \param channel the audio channel…

Datacom HCIP笔记-路由策略与路由控制 之二

路由策略和策略的区别&#xff1f; 路由策略&#xff1a; 操作的对象是路由表条目&#xff0c; 实现路由过滤&#xff0c;从而实现访问控制&#xff0c;引入时过滤&#xff0c;发送和接收路由时过滤。 通过配置cost&#xff0c;来实现路径的控制。 策略路由&#xff1a; 对…

【Python】还在用print进行调试,你Out了!!!

1. 引言 Python 中最常用的函数是什么&#xff1f;像在大多数编程语言中&#xff0c;print() 函数是最常用的。我相信大多数开发者都会像我一样&#xff0c;在开发过程中多次使用它将信息进行打印。 当然&#xff0c;没有其他方法可以完全取代print()函数。不过&#xff0c;当…

QA测试开发工程师面试题满分问答9: Python中内存管理的概念、原理、使用

概念原理 Python中的内存管理是由解释器自动处理的&#xff0c;它使用引用计数和垃圾回收机制来管理内存。以下是Python内存管理的一些关键概念、设计原理和最佳实践&#xff0c;以帮助您高效使用和管理内存&#xff1a; 引用计数&#xff1a;Python使用引用计数来追踪对象的引…

谷歌浏览器如何截全屏图片?

有时候想要截取浏览器全屏&#xff0c;谷歌浏览器自带截取全屏命令&#xff0c;操作步骤如下&#xff1a; 1、按住键盘的F12或者是空白处点击鼠标右键找到检查项 2、按住ctrlshiftp&#xff0c;会出现搜索框的界面 3、搜索框中输入screen&#xff0c;选中Capture full size scr…

项目架构MVC,DDD学习

写在前面 本文一起看下项目架构DDD&#xff0c;MVC相关的内容。 1&#xff1a;MVC 不管我们做什么项目&#xff0c;自己想想其实只是做了三件事&#xff0c;如下&#xff1a; 其实&#xff0c;这三件事完全在一个类中做完也可以可以正常把项目完成的&#xff0c;就像下面这…

Redis简介、常用命令

目录 一、关系数据库​​与非关系数据库​​ 1.1. 关系型数据库 1.2 非关系型数据库 1.3.关系数据库与非关系型数据库区别 1.3.1. 数据存储方式不同 1.3.2. 扩展方式不同 1.3.3.对事务性的支持不同 1.4.非关系型数据库产生背景 二、Redis 2.1.Redis简介 2.2.Redis的…

如何使用开源情报跟踪一个人?在线访问网站以及使用方法介绍

如何使用开源情报跟踪一个人&#xff1f;在线访问网站以及使用方法介绍。 开源情报&#xff08;OSINT&#xff09;是一门关于收集和分析公开可用信息的独特技艺&#xff0c;它致力于构建个人或团体的详尽档案。 这一过程中&#xff0c;信息搜集者会利用多元化的信息源&#xff…

火山方舟大模型服务平台调用Demo测试(豆包)

豆包得后台大模型支持为字节得火山方舟&#xff0c;所以想使用豆包的API&#xff0c;直接从这里就可以。 一、首先注册账号&#xff1a; 火山引擎-云上增长新动力 注册完成之后&#xff0c;控制台-账户-API访问密钥 二、找到API测试用例&#xff1a; Skylark-chat API调用…

Linux实验3 shell命令进阶

一&#xff1a;实验目的 学习Linux下的文件系统结构&#xff0c;了解最基本的Linux下的shell命令操作&#xff0c;例如ls, cd, cat等各种指令操作。 学习vim编辑器的使用方式&#xff0c;学习如何使用ssh连接远程服务器。 二&#xff1a;实验内容 1&#xff0e;利用ls命令查找…

记一次Debug与Release版程序输出不一致的问题解决

问题叙述&#xff1a; 在x86平台下无论Debug还是Release都没问题&#xff0c;而在arm平台下Debug版本程序无问题&#xff0c;Release版本程序&#xff08;-O3编译&#xff09;发现输出值不正确&#xff0c;怀疑值被篡改&#xff0c;于是在调用前后分别使用printf打印出参数值&…

pdf操作器(图片转文字、PDF转word、PDF拆分、图片jpg、png互转)

pdf操作器&#xff08;不用联网图片转文字、PDF转word、PDF拆分、图片jpg、png互转&#xff09;介绍目前该软件实现了以下功能 pdf转wordpdf拆分图片&#xff0c;图片导出在桌面的一个文件夹里图片合并为pdf压缩、转换图片格式&#xff08;jpg和png&#xff09;OCR图片转文字&…

Leetcode刷题-哈希表详细总结(Java)

哈希表 当我们想使⽤哈希法来解决问题的时候&#xff0c;我们⼀般会选择如下三种数据结构。 数组set &#xff08;集合&#xff09;map&#xff08;映射&#xff09; 当我们遇到了要快速判断⼀个元素是否出现集合⾥的时候&#xff0c;就要考虑哈希法。如果在做⾯试题⽬的时候…

【Frida】【Android】 10_爬虫之WebSocket协议分析

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…