IO/NIO — File递归
File类在java.io`包下,可以在程序中操作文件和目录
File可以新建、删除、重名名文件和目录,但是不能访问文件内容,需要通过输入/输出流
一、File 相关方法
1、创建File对象
-
File(String c)
:以当前路径创建一个File对象 -
File(File p, String c)
:将File文件封装成File对象
2、File类的获取
-
getName()
:获取文件名 -
length()
:获取文件大小 -
getAbsoluteFile()
:获取绝对路径 -
getAbsoluteFile().getParent()
:获取上一级路径 -
getParent()
:获取相对路径的父路径
3、文件和文件夹的创建删除等
-
mkdir()
:创建指定目录 -
mkdirs()
:创建多层文件夹 -
createNewFile()
:创建一个新文件 -
delete()
:删除文件或目录 -
exists()
:判断文件或目录是否存在 -
isDirectory()
:判断是否为一个目录 -
isFile()
:判断是否为一个文件
4、文件目录遍历
-
list()
:返回一个字符串数组,每个字符串表示文件或者目录 -
listFiles()
:返回一个绝对路径名数组,表示目录中的文件
二、文件过滤器
当通过
listFiles()
方法,可以获取一个目录下所有的文件和文件夹,当想获得指定扩展名的文件时,可以通过文件过滤器
-
listFiles(FilenameFileter filter)
:返回符合过滤器要求的所有文件和文件夹 - 使用:自定义过滤器继承 FilenameFileter 类,实现
accept(File dir, String name)
方法,该方法获得 File 的所有子目录或者文件
三、File 递归遍历实现
递归:在方法内能自己调自己
public class FileTest {
public static void main(String[] args) {
// 1.指定要打印的目录File对象
File file = new File("D:\\test");
// 2.获取指定目录以及子目录中的所有的txt文件
getFileAll(file);
}
/** 获取指定目录以及子目录中的txt文件 */
public static void getFileAll(File file) {
// 通过自定义的文件过滤器获取符合要求数据
File[] files = file.listFiles(MyFileFilter);
for (File f : files) {
//判断当前遍历到的是否为目录
if(f.isDirectory()){
// 是目录,继续遍历
getFileAll(f);
}else{
// 是文件,打印
System.out.println(f);
}
}
}
// 自定类继承FilenameFilter过滤器接口
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
}