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

(图片来源网络,侵删)
使用 File.listFiles() 方法(基础方法)
import java.io.File;
public class ReadFiles {
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());
} else if (file.isDirectory()) {
System.out.println("文件夹: " + file.getName());
}
}
}
}
}
使用递归读取所有子文件夹中的文件
import java.io.File;
public class ReadAllFiles {
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.isFile()) {
System.out.println("文件: " + file.getAbsolutePath());
} else if (file.isDirectory()) {
System.out.println("文件夹: " + file.getAbsolutePath());
listFiles(file); // 递归调用
}
}
}
}
}
使用 Java NIO Files.walk() 方法(Java 8+)
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class ReadFilesNIO {
public static void main(String[] args) {
try (Stream<Path> paths = Files.walk(Paths.get("C:\\path\\to\\your\\folder"))) {
paths.filter(Files::isRegularFile)
.forEach(path -> System.out.println("文件: " + path));
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 Java NIO Files.walkFileTree() 方法(更灵活)
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class ReadFilesWalkFileTree {
public static void main(String[] args) {
Path start = Paths.get("C:\\path\\to\\your\\folder");
try {
Files.walkFileTree(start, 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;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项
- 路径分隔符:Windows使用反斜杠
\,Unix/Linux使用正斜杠,或者使用File.separator - 权限问题:确保程序有权限访问目标文件夹
- 异常处理:妥善处理可能抛出的异常,如
SecurityException、IOException等 - 性能考虑:对于大型文件夹结构,NIO方法通常比传统IO方法更高效
方法可以根据你的具体需求选择使用,其中Java NIO的方法(特别是Files.walk())在Java 8及更高版本中推荐使用,因为它提供了更简洁的API和更好的性能。

(图片来源网络,侵删)
