【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); } } } }
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/14828186.html