Java遍历文件夹下所有文件的方法
在Java中,有几种常见的方法可以遍历文件夹及其子文件夹中的所有文件,以下是几种实现方式:

使用File类的listFiles()方法递归遍历
import java.io.File;
public class TraverseFolder {
public static void main(String[] args) {
File folder = new File("你的文件夹路径");
listFiles(folder);
}
public static void listFiles(File folder) {
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// 递归遍历子文件夹
listFiles(file);
} else {
// 处理文件
System.out.println(file.getAbsolutePath());
}
}
}
}
}
使用Java NIO的Files.walk()方法(Java 8+)
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class TraverseFolderNIO {
public static void main(String[] args) throws IOException {
Path startPath = Paths.get("你的文件夹路径");
Files.walk(startPath)
.filter(Files::isRegularFile)
.forEach(System.out::println);
}
}
使用Files.walkFileTree()方法(更灵活的控制)
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class TraverseFolderTree {
public static void main(String[] args) throws IOException {
Path startPath = Paths.get("你的文件夹路径");
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("进入目录: " + dir);
return FileVisitResult.CONTINUE;
}
});
}
}
使用Apache Commons IO库
如果你可以使用第三方库,Apache Commons IO提供了更简洁的方法:
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.Collection;
public class TraverseFolderCommons {
public static void main(String[] args) {
File folder = new File("你的文件夹路径");
Collection<File> files = FileUtils.listFiles(folder, null, true);
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
}
注意事项
- 处理大文件夹时要注意性能和内存使用
- 考虑添加异常处理(如权限问题、符号链接等)
- 对于Java 8+,NIO方法通常更高效
- 如果需要过滤特定类型的文件,可以添加过滤条件
选择哪种方法取决于你的具体需求、Java版本和是否可以使用第三方库。

