import java.io.File;
public class RecursiveFileList {
public static void main(String[] args) {
String directoryPath = "D:\\Test"; // 注意!这里路径要修改成你要查的目录
File directory = new File(directoryPath);
if (directory.exists() && directory.isDirectory()) {
listFilesAndDirectories(directory);
} else {
System.out.println("目录不存在或不是有效的目录路径!");
}
}
public static void listFilesAndDirectories(File directory) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
System.out.println("目录:" + file.getAbsolutePath());
listFilesAndDirectories(file); // 递归调用
} else {
System.out.println("文件:" + file.getAbsolutePath());
}
}
}
}
}
当我们要递归地列出指定目录中的所有文件和子目录时,我们可以使用递归方法来处理。递归是指在方法内部调用自身的过程。在这个问题中,我们定义一个listFilesAndDirectories
方法,该方法接收一个File
对象,代表当前要处理的目录。
-
我们首先检查当前传入的
File
对象是否是一个有效的目录,同时也要确保该目录存在。这是为了处理传入无效目录或不存在的情况。 -
然后,我们调用
listFiles
方法来获取当前目录下的所有文件和子目录,并将它们存储在一个File
数组中。 -
如果当前目录中有子目录(
File
对象表示的是目录而不是文件),我们会进入一个for
循环遍历每个子目录。 -
对于每个子目录,我们会先打印出它的绝对路径,表示它是一个目录,然后再调用
listFilesAndDirectories
方法,传入当前子目录的File
对象。这样就实现了递归,我们会重复进行步骤1-4,直到遍历到没有子目录为止。 -
如果当前目录中有文件(
File
对象表示的是文件而不是目录),我们会打印出它的绝对路径,表示它是一个文件。
通过这种递归的方式,我们可以处理任意深度的目录结构,将所有的文件和子目录都正确地列出来。在实际使用中,我们要注意避免递归层级过深,以免导致栈溢出等问题。