统豺虎,御边幅,号令明,军威肃。
概述
学习将Java 8 API与Files.list()和DirectoryStream一起使用,以递归方式列出目录中存在的所有文件,包括隐藏文件。
使用Files.list()列出所有文件和子目录
Files.list()方法列出当前目录中的所有文件名和子目录。
Files.list(Paths.get(".")) .forEach(System.out::println); Output:.filename1.txt.directory1.filename2.txt.Employee.java
使用过滤器表达式仅列出目录内的文件
如果需要,可以使用筛选器筛选出子目录并只打印文件名。
Files.list(Paths.get(".")) .filter(Files::isRegularFile) .forEach(System.out::println); Output:.filename1.txt.filename2.txt.Employee.java
要列出另一个目录中的文件,我们可以将“.”替换为所需目录的完整路径。
使用Files.newDirectoryStream()列出文件和子目录
Java提供了一种更灵活的方法来使用Files.newDirectoryStream()遍历目录内容。
请注意,如果我们使用的是大目录,那么使用DirectoryStream实际上会使代码更快。
Files.newDirectoryStream(Paths.get(".")) .forEach(System.out::println); Output:.filename1.txt.directory1.filename2.txt.Employee.java
仅列出具有Files.newDirectoryStream()的文件
仅列出文件并从流中排除所有目录,请使用path filter作为第二个参数。
Files.newDirectoryStream(Paths.get("."), path -> path.toFile().isFile()) .forEach(System.out::println);Output:.filename1.txt.filename2.txt.Employee.java
使用Files.newDirectoryStream()列出某些扩展名的文件
你可以更改在第二个参数中传递的路径筛选器表达式,以仅获取特定扩展名的文件。
Files.newDirectoryStream(Paths.get("."), path -> path.toString().endsWith(".java")) .forEach(System.out::println);Output:.Employee.java
在目录中查找所有隐藏文件
要查找所有隐藏文件,可以在上述任何示例中使用过滤器表达式 file -> file.isHidden()。
或者,可以使用此快捷方式。
final File[] files = new File(".").listFiles(file -> file.isHidden());//orfinal File[] files = new File(".").listFiles(File::isHidden);
在以上示例中,我们学习了使用Java 8 API列表或根据各种搜索条件递归地迭代目录中的文件。
原文链接:Java 8 List All Files In Directory – Six Examples