首页 > 编程知识 正文

java复习第7天74IO流递归文件过滤器

时间:2023-05-06 07:46:53 阅读:232405 作者:1134

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

文章目录 1、递归1.1、递归概述和分类2、过滤器***后记*** :

内容 1、递归 1.1、递归概述和分类

递归:在方法内调用自己

递归分类

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

注意事项:

递归需要有限定条件,保证递归能够停下来,否则会发生栈内存溢出虽然递归有限定条件,但是递归次数不能太多,否则也会发生内存溢出构造方法,禁止递归

示例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:testc.java f:testhelloHelloWorld.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:testc.java f:testhelloHelloWorld.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:testc.java f:testhelloHelloWorld.java 后记

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。