在Java中,获取文件夹下所有的文件(包括子文件夹中的文件)通常可以通过两种主要方法来实现:
1. 使用 File.listFiles()
方法(递归实现)
对于Java 7及以前的版本,可以使用File.listFiles()
方法递归地获取文件夹及其子文件夹下的所有文件。这种方法需要手动实现递归逻辑:
import java.io.File;
public class GetAllFiles {
public static void main(String[] args) {
File folder = new File("/path/to/your/folder");
if (folder.isDirectory()) {
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
getAllFiles(file);
} else {
System.out.println(file.getAbsolutePath());
}
}
}
}
}
private static void getAllFiles(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
getAllFiles(file);
} else {
System.out.println(file.getAbsolutePath());
}
}
}
}
}
2. 使用 Java 8 的 Files.walk()
方法
从Java 8开始,可以使用Files.walk()
方法更加简洁地实现这一功能,该方法能够自动遍历目录树:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
public class GetAllFilesJava8 {
public static void main(String[] args) {
Path startPath = Paths.get("/path/to/your/folder");
try {
// 打印所有文件的绝对路径
Files.walk(startPath)
.filter(Files::isRegularFile)
.forEach(System.out::println);
// 或者收集到一个List中
List<Path> allFiles = Files.walk(startPath)
.filter(Files::isRegularFile)
.collect(Collectors.toList());
System.out.println("Total files found: " + allFiles.size());
} catch (IOException e) {
e.printStackTrace();
}
}
}