【Java SE进阶】Day08 File类、递归

网友投稿 287 2022-09-26

【Java SE进阶】Day08 File类、递归

一、File类

1、概述java.io.File

文件和路径的抽象表示用于文件和目录的创建、查找和删除等分类

file--文件directory--文件夹/目录path--路径

2、静态成员变量

pathSeparator/pathSeparatorChar:路径分隔符(;)separator/separatorChar:名称分隔符

Linux:/Windows:\

3、绝对路径和相对路径

相对:相对于项目的根目录路径不区分大小写,(Java语言中)双反斜杠表示转义字符

4、构造方法

File(File parent, String child)File(String parent, String child)File(String pathname)File(URI uri)

5、获取方法

getAbsolutePath() :绝对路径getPath():转换为路径字符串getName():返回文件和目录名length():返回文件长度

6、判断方法

exists()isDirectory():目录isFile()

7、增删方法

createNewFile() :若不存在,则创建delete()mkdir():创建单级目录mkdirs()

8、遍历功能

list():返回子文件和目录listFiles():返回带路径的子文件和目录

二、递归

1、概述

直接递归间接递归注意:次数不宜过多,否则会产生栈内存溢出

2、打印多级目录

public static void getAllFile(File dir){ //递归打印目录 System.out.println(dir); File[] files=dir.listFiles(); for (File f:files) { if(f.isDirectory()){ getAllFile(f); } else{ System.out.println(f); } } }

三、综合案例

1、文件搜索:搜索D:\aaa目录中的java文件

public static void getAllFile(File dir){ //递归打印目录 //不输出目录 // System.out.println(dir); File[] files=dir.listFiles(); for (File f:files) { if(f.isDirectory()){ getAllFile(f); } else{ //只要.java文件 //使用endwith() //1.把file对象f转换为字符串对象【f.getName()】 String name = f.getName();//获取文件名称 String path = f.getPath();//比较全的文件路径【绝对路径】 String s = f.toString(); //如果是大写,转换为小写 s.toLowerCase();//字符串转换为小写 //2.调用String类中的方法endsWith()判断是否以.java结尾 boolean b = s.endsWith(".pdf"); //如果为真,则输出 if (b) { System.out.println(f); } //用一行链式编程实现 if(f.getName().toLowerCase().endsWith(".pdf")){ System.out.println("-------------------------------------------"); } } }

2、文件过滤器优化

listFiles():返回路径中的文件listFiles(FileFilter filter) :返回满足过滤条件(实现类重写accept方法)的文件和目录listFiles(FilenameFilter filter) :类的accept方法有两个参数(路径 +文件名)

3、FileNameFilter过滤器的使用和Lambda优化

public class Demo06FilterBianliFile2 { public static void main(String[] args) { File file=new File("E:\\Java"); //打印多级目录 getAllFile(file); } public static void getAllFile(File dir){ //递归打印目录 //传递一个过滤器对象 File[] files=dir.listFiles((pathname)-> pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".pdf")); //使用Lambda表达式优化匿名内部类(函数式接口可以使用)// File[] files=dir.listFiles((d,name)-> new File(d,name)||name.getName().toLowerCase().endsWith(".pdf")); for (File f:files) { if(f.isDirectory()){ getAllFile(f); } else{ System.out.println(f); } } }}

作者:​​哥们要飞​​​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【SQL基础】多表查询:子查询、连接查询(JOIN)、组合查询(UNION集合运算)
下一篇:关于idea中出现nbsp和zwsp的完美解决办法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~