Java 获取文件夹下所有文件的方法
在Java中,有几种方法可以获取文件夹下的所有文件,以下是几种常用的实现方式:

(图片来源网络,侵删)
使用 File.listFiles() 方法
import java.io.File;
public class ListFiles {
public static void main(String[] args) {
File folder = new File("C:\\path\\to\\your\\folder");
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile()) {
System.out.println(file.getName());
}
}
}
}
}
递归获取所有子文件夹中的文件
import java.io.File;
public class ListFilesRecursive {
public static void main(String[] args) {
File folder = new File("C:\\path\\to\\your\\folder");
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 (Java 7+)
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class ListFilesNIO {
public static void main(String[] args) throws IOException {
Path start = Paths.get("C:\\path\\to\\your\\folder");
Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println(file.getFileName());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
return FileVisitResult.CONTINUE;
}
});
}
}
使用 Java 8 Stream API
import java.io.File;
import java.util.Arrays;
public class ListFilesStream {
public static void main(String[] args) {
File folder = new File("C:\\path\\to\\your\\folder");
Arrays.stream(folder.listFiles())
.filter(File::isFile)
.forEach(file -> System.out.println(file.getName()));
}
}
递归使用 Stream API
import java.io.File;
import java.util.stream.Stream;
public class ListFilesRecursiveStream {
public static void main(String[] args) {
File folder = new File("C:\\path\\to\\your\\folder");
listFiles(folder).forEach(System.out::println);
}
public static Stream<File> listFiles(File folder) {
File[] files = folder.listFiles();
if (files == null) {
return Stream.empty();
}
return Stream.concat(
Arrays.stream(files).filter(File::isFile),
Arrays.stream(files).filter(File::isDirectory).flatMap(ListFilesRecursiveStream::listFiles)
);
}
}
注意事项
- 确保文件夹路径正确,并且程序有权限访问该文件夹
- 处理可能出现的
NullPointerException(当文件夹不存在或无法访问时) - 对于大型文件夹,递归方法可能会导致栈溢出,可以考虑使用迭代方法
- 在Java 7及以上版本,推荐使用NIO API,它提供了更好的性能和功能
方法可以根据你的具体需求选择使用,对于简单的文件列表,listFiles() 方法就足够了;对于复杂的文件遍历需求,NIO或递归方法会更合适。

(图片来源网络,侵删)
