1.通过 File 对象的 listFiles() 方法
File[] files=new File("F:\\eclipse-workspace\\PythonTest").listFiles();
for(File file:files) {
System.out.println(file.getAbsolutePath());
}
2.通过 Files 对象的 newDirectoryStream() 方法产生一个可迭代对象
//try块保证目录流被正确关闭
try(DirectoryStream<Path> paths=Files.newDirectoryStream(Paths.get("F:\\eclipse-workspace\\javaProject\\src\\bank"),"*.java")){
for(Path path:paths) {
System.out.println(path.toAbsolutePath());
}
}
可以运用glob模式来过滤文件 (*.java 只会显示出以 java 为后缀的文件)
方法1在目录中包含大量文件时性能会非常低 ,所以在目录中包含大量文件时尽量使用方法2来遍历文件夹
3.遍历文件夹下子文件以及子文件夹
Files.walkFileTree(Paths.get("F:\\test"),new FileVisitor<Path>() {
//一个目录被访问前调用
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("访问 "+dir.toAbsolutePath()+" 文件夹前");
return FileVisitResult.CONTINUE;
}
//访问一个文件时调用
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("访问 "+file.toAbsolutePath()+" 文件");
return FileVisitResult.CONTINUE;
}
//访问文件遇到错误时调用
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
System.out.println("访问 "+file.toAbsolutePath()+" 文件或目录失败");
return FileVisitResult.CONTINUE;
}
//一个目录被访问后调用
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println("访问 "+dir.toAbsolutePath()+" 文件夹后");
return FileVisitResult.CONTINUE;
}
});
方法返回值:
FileVisitResult.CONTINUE 继续访问下一个文件
FileVisitResult.SKIP_SUBTREE 继续访问,但是不再访问这个目录下的任何项
FileVisitResult.SKIP_SIBLINGS 继续访问,但是不再访问这个文件的兄弟文 ( 和该文件在同一个目录下的文件 )
FileVisitResult.TERMINATE 终止访问