你是否遇到某个功能,需要遍历目录下所有目录,所有文件。
1、遍历所有子目录,子文件
private static void func(File file) {
File[] fs = file.listFiles();
for (File f : fs) {
if (f.isDirectory()) //若是目录,则递归打印该目录下的文件
func(f);
if (f.isFile()) //若是文件,直接打印
System.out.println(f);
}
}
public static void main(String[] args) {
String inputPath = "F:\\log\\test";; //要遍历的路径
File file = new File(inputPath); //获取其file对象
func(file);
}
2、遍历所有子目录,子文件
使用Path ,Files工具类
public static void main(String[] args) {
Path path = Paths.get("D:\\apache-maven-3.6.0");
try {
Files.walkFileTree(path,new SimpleFileVisitor<Path>(){
//在访问目录中的条目之前为目录调用
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
//遍历所有目录
System.out.println(dir);
return super.preVisitDirectory(dir, attrs);
}
//在访问文件中调用
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
//遍历所有文件
System.out.println(file);
return super.visitFile(file, attrs);
}
//在访问文件失败调用
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return super.visitFileFailed(file, exc);
}
//在访问目录中的条目及其所有后代之后为目录调用
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return super.postVisitDirectory(dir, exc);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}