📅  最后修改于: 2023-12-03 14:42:59.219000             🧑  作者: Mango
在Java中,我们可以使用File类来读取现有目录的内容。File类代表文件和目录路径名的抽象表示,它包含了多个构造函数和方法,可以让我们创建、删除、重命名和修改文件和目录。
我们可以使用File类中的list()和listFiles()方法来读取目录下的文件和子目录。
// 读取当前目录下的文件和子目录,返回一个字符串数组
File currentDir = new File(".");
String[] files = currentDir.list();
for (String file : files) {
System.out.println(file);
}
// 读取当前目录下的文件和子目录,返回一个File数组
File[] files = currentDir.listFiles();
for (File file : files) {
System.out.println(file.getName());
}
以上代码分别使用了list()和listFiles()方法来读取当前目录下的文件和子目录,两个方法的差异在于,前者返回文件名字符串,而后者返回File对象。
如果我们只需要读取指定类型的文件,可以使用FileNameFilter接口和listFiles(FileFilter filter)方法。
// 读取当前目录下所有的.java文件,并输出文件名
File currentDir = new File(".");
File[] javaFiles = currentDir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
});
for (File javaFile : javaFiles) {
System.out.println(javaFile.getName());
}
以上代码使用了匿名内部类实现了FileNameFilter接口,并在accept()方法中过滤了所有以.java结尾的文件。
如果我们需要读取某个目录下的所有文件,包括子目录中的文件,可以使用递归方法来实现。
// 递归读取指定目录下的所有文件
public static void listFile(File dir) {
File[] files = dir.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
if (file.isDirectory()) {
listFile(file);
} else {
System.out.println(file.getAbsolutePath());
}
}
}
}
以上代码中的listFile()方法,首先读取指定目录下的所有文件和子目录,对于子目录,递归调用listFile()方法,对于文件,输出文件的绝对路径。
使用File类来读取现有目录的内容是Java编程中比较常用的操作之一。我们可以使用list()和listFiles()方法来读取目录下的文件和子目录,使用FileNameFilter接口来过滤指定类型的文件,使用递归方法来读取子目录下的文件。