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

2023-02-15,,,,

一、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);
}
}
}
}

【Java SE进阶】Day08 File类、递归的相关教程结束。

《【Java SE进阶】Day08 File类、递归.doc》

下载本文的Word格式文档,以方便收藏与打印。