java复习第7天---7.4---IO流---递归、文件过滤器

2023-11-12

java复习第7天---7.4---IO流---递归、文件过滤器


目录




内容

1、递归

1.1、递归概述和分类

  • 递归:在方法内调用自己

  • 递归分类

    • 递归分为直接递归和间接递归
    • 直接递归:方法内直接调用自己
    • 间接调用:方法A 调用B,方法B调用C,方法C调用A
  • 注意事项:

    1. 递归需要有限定条件,保证递归能够停下来,否则会发生栈内存溢出
    2. 虽然递归有限定条件,但是递归次数不能太多,否则也会发生内存溢出
    3. 构造方法,禁止递归
  • 示例1.1-1:求n的阶乘 n! = 1 * 2 * 3 * … * n

      package func.digui;
    
      public class TestDigui1 {
      	public static void main(String[] args) {
      		// 计算n的阶乘 1*2*3*...*n
      		int n = 10;
      		System.out.println(n + "! = " + method(n));
      	}
      	public static long method(int n) {
      		if(n == 1) return 1;
      		return n * method(n - 1);
      	}
      }
      测试结果:
      10! = 3628800
    

+示例1.1-2:递归打印多级目录

	package io.file;

import java.io.File;

public class TestFileDigui {
	public static void main(String[] args) {
		String parent = "f:\\test";
		File file = new File(parent);
		printDir(file, 1);
	}

	public static void printDir(File file, int level) {
		for(int i = 0; i < level; i++) {
			System.out.print("-");
		}
		System.out.println(file.getName());
		if(file.isDirectory()) {
			File[] files = file.listFiles();
			for(File x: files) {
				printDir(x, level + 1);
			}
		}
	}
}
测试结果:
-test
--a.txt
--b
---c
----d
--b.txt
--c.java
--d.bmp
--hello
--src
  • 示例1.1-3:搜索所有.java文件

      package io.file;
    
      import java.io.File;
    
      public class TestFileDigui2 {
      	public static void main(String[] args) {
      		String parent = "f:\\test";
      		File file = new File(parent);
      		searchJava(file);
      	}
    
      	public static void searchJava(File file) {
    
      		if(file.isDirectory()) {
      			File[] files = file.listFiles();
      			for(File x: files) {
      				searchJava(x);
      			}
      		}else {
      			if(file.getName().endsWith(".java")) {
      				System.out.println(file.getAbsolutePath());
      			}
      		}
      	}
      }
      测试结果:
      f:\test\c.java
      f:\test\hello\HelloWorld.java
    

2、过滤器

  File类中有2个和listFiles重载的方法,方法参数为过滤器。

  • public Files[] listFiles(FileFilter filter):遍历抽象路径名符合过滤器规则的File对象
  • public Files[] listFiles(FilenameFilter filter):遍历抽象路径名符合过滤器规则的File对象

FileFilter和FilenameFilter接口都没有实现类,如果需要使用需要自定义实现。

  • FileFilter接口:

    • 唯一抽象方法:public boolean accept(File pathname)
    • File pathname: 使用listFiles遍历目录得到的每一个File对象
  • FilenameFilter接口:

    • 唯一抽象方法:public boolean accept(File dir, String name)
    • File dir:需要遍历的目录
    • String name:listFiles遍历 dir目录得到的每一个文件/目录名称
  • 示例2-1:搜索F:\test目录下所有的.java文件,FileFilter过滤器+ lambda表达式实现

      package io.file;
    
      import java.io.File;
      import java.io.FileFilter;
    
      public class TestFileDigui3 {
      	public static void main(String[] args) {
      		String parent = "f:\\test";
      		File file = new File(parent);
      		searchJava(file);
      	}
      	// 搜索java文件
      	public static void searchJava(File file) {
      		File[] filelist = file.listFiles(filepath->filepath.isDirectory() || filepath.getName().toLowerCase().endsWith(".java"));
    
      		for(File x: filelist) {
      			if(x.isDirectory()) searchJava(x);
      			else System.out.println(x.getAbsolutePath());
      		}
      	}
      }
    
      测试结果:
      f:\test\c.java
      f:\test\hello\HelloWorld.java
    
  • 示例2-2:搜索F:\test目录下所有的java文件,FilenameFilter + lambda实现

      package io.file;
    
      import java.io.File;
    
      public class TestFileDigui4 {
      	public static void main(String[] args) {
      		String parent = "f:\\test";
      		File file = new File(parent);
      		searchJava(file);
      	}
      	// 搜索java文件
      	public static void searchJava(File file) {
      		File[] filelist = file.listFiles((dir, name)->new File(dir, name).isDirectory() || name.toLowerCase().endsWith(".java"));
    
      		for(File x: filelist) {
      			if(x.isDirectory()) searchJava(x);
      			else System.out.println(x.getAbsolutePath());
      		}
      	}
      }
      测试结果:
      f:\test\c.java
      f:\test\hello\HelloWorld.java
    

后记

本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785

前端项目源代码地址:https://gitee.com/gaogzhen/vue-leyou
    后端JAVA源代码地址:https://gitee.com/gaogzhen/JAVA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java复习第7天---7.4---IO流---递归、文件过滤器 的相关文章

随机推荐

  • java jsp公共异常页面_JSP页面的异常处理

    对于jsp页面错误处理这里大致有两种方式 一 在Web xml中配置全局的错误异常处理 即凡是该项目下 即虚拟路径下的所有文件 的任意一个文件错误或者异常 都会跳到指定的错误处理页面 全局的错误处理可以处理两种类型的错误 一种是HTTP代码
  • gin框架10--XML/JSON/YAML/ProtoBuf 渲染

    gin框架10 XML JSON YAML ProtoBuf 渲染 介绍 案例 说明 介绍 本文主要介绍gin 中的 XML JSON YAML ProtoBuf 等常见渲染方法 以及其测试结果 案例 源码 package main imp
  • 构造任意多个HashCode相同的字符串

    在Java中字符串的HashCode的实现如下 JDK8 public int hashCode int h hash if h 0 value length gt 0 char val value for int i 0 i lt val
  • Spark提交参数说明和常见优化

    会用spark 会调api和能用好spark是两回事 在进行开发的过程中 不仅要了解运行原理 还要了解业务 将合适的方法和业务场景合适的结合在一起 才能发挥最大的价值 spark submit 进入spark的home目录 执行以下命令查看
  • macOS通过钥匙串访问找回WiFi密码的详细教程

    如果您忘记了Mac电脑上的WiFi密码 可以通过钥匙串访问来找回它 具体步骤如下 1 打开Mac电脑的 启动台 然后在其他文件中找到 钥匙串访问 2 运行 钥匙串访问 应用程序 点击左侧的 系统 然后在右侧找到要查看的WiFi网络名称 如果
  • 在linux上安装与卸载MySQL【非常详细】

    文章目录 一 安装MySQL 1 从网上下载文件的wget命令 2 下载MySQL的repo源 3 安装MySQL的rpm包 4 检查是否有两个repo源 5 安装MySQL 6 启动MySQL 7 登录MySQL 8 登录并切换数据库 查
  • Leetcode 题组 28

    112 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 判断该树中是否存在 根节点到叶子节点 的路径 这条路径上所有节点值相加等于目标和 targetSum 叶子节点 是指没有子节点的节点 示例 1 输入
  • java 在阻塞时终结学习笔记

    一个线程可以处于以下四种状态 1 新建 new 当线程被创建时 它只会短暂地处于这种状态 此时它已经分配了必需的系统资源 并执行了初始化 此时刻线程已经有资格获得CPU时间了 之后调度器将把这个线程转变为可运行状态或阻塞状态 2 就绪 Ru
  • Python机器学习(三)--决策树算法

    Python机器学习 三 决策树算法 原创 2014年07月14日 13 57 55
  • C语言中的fprintf和printf区别在哪?

    原型 fprintf的函数原型为 int fprintf FILE stream const char format argument 而printf的函数原型为 int printf const char format argument
  • uniapp使用绝对定位被父元素截断问题

    在做uniapp开发时真机运行的时候使用绝对定位 会被他限制在他整个的父元素之内 本来这两块是做了两个子组件 但是 点击问号的时候就会出现上述问题 弹框永远显示不全 解决方案 将这个弹框移到父组件中 如index vue 然后使用一个div
  • jdk下载百度云(windows×64-7,8,10)

    之前找了很久 好多都要很多积分 所以我就给大家整理到百度云盘 https pan baidu com s 1UgiZf6R8PNtnlTDNW N2Kw 提取码 o6cp
  • 只有持续的变革和创新才是CRM成功的关键

    这两年来 我目睹了众多的企业在进行CRM的尝试和体验 也亲历了众多的企业对CRM成功与失败的讨论 甚至于有很多关于CRM失败的项目和言论 让更多后面的企业停止了尝试的脚步 而这一切 不应该只归罪与一个CRM系统 或者一个CRM项目 而要更多
  • error: CreateProcess: No such file or directory的解决方法

    办公的笔记本上先装有qnxIDE的700环境 然后再用Eclipse 搭建了一个qnx710的环境 刚搭建完qnx710的时候是可以编译通过的 之后第二天再开机编译Eclipse 710就编译不过了 报错就是 error CreatePro
  • WiFi技术概述

    1 概述 WLAN是无线局域网络的简称 全称为Wireless Local Area Networks 是一种利用无线技术进行数据传输的系统 该技术的出现能够弥补有线局域网络之不足 以达到网络延伸之目的 Wi Fi是无线保真的缩写 英文全称
  • spring加载一个或者多个properties配置文件方法

    在项目中有些参数需要经常修改 或者后期需要修改 比如IP 调用别人的接口地址 数据库地址及帐号密码等 那么我们就不能把这些参数写死在代码里 虽然也可以在代码里改 但是如果是不懂代码的运维人员去现场部署项目又怎么改你的代码 那我们最好把这些参
  • 关于Discuz X3.2如何设置邮箱验证的具体方法

    原文地址 兔子酱老师好久没发文章了的 是因为最近在学习和熟悉Discuz社区程序 这个PHP程序是一木主编推荐给我的 妹子我简单操作了几下 很是喜欢 这个程序目前的版本是X3 2 带有很多好玩的功能 听说这个程序早几年被腾讯收购了的 所以
  • 控制疫情蔓延嵌入式物联网能帮大忙

    联合国所订定之永续发展目标之一 便是针对防治传染病的蔓延做好准备 在新型冠状病毒 COVID 19 流行期间 防疫已成为当前最重要目标 科技在对抗传染病方面扮演重要角色 而物联网 IoT 相关技术正是我们重要的防疫武器 降低成本 自发自主性
  • matlab 求单/多元函数极值

    matlab 求单 多元函数极值 单元函数极值 平时如果手算的话 就会先求导数 再求驻点 最终代值算出极值 如果用matlab代码求的话 就可以减少很多不必要的计算 fun inline 0 5 x exp x 2 ezplot fun 0
  • java复习第7天---7.4---IO流---递归、文件过滤器

    java复习第7天 7 4 IO流 递归 文件过滤器 目录 文章目录 1 递归 1 1 递归概述和分类 2 过滤器 后记 内容 1 递归 1 1 递归概述和分类 递归 在方法内调用自己 递归分类 递归分为直接递归和间接递归 直接递归 方法内