猿问

如何迭代Java目录中的文件?

如何迭代Java目录中的文件?

我需要一个目录中所有文件的列表,包括所有子目录中的文件。用Java完成目录迭代的标准方法是什么?



蓝山帝景
浏览 656回答 3
3回答

胡子哥哥

你可以用File#isDirectory()若要测试给定文件(路径)是否为目录,请执行以下操作。如果这是true,然后您只需再次调用同一个方法,并使用它的File#listFiles()结果。这叫做递归.这是一个基本的开球例子。public static void main(String... args) {     File[] files = new File("C:/").listFiles();     showFiles(files);}public static void showFiles(File[] files) {     for (File file : files) {         if (file.isDirectory()) {             System.out.println("Directory: " + file.getName());             showFiles(file.listFiles()); // Calls same method again.         } else {             System.out.println("File: " + file.getName());         }     }}请注意,这对StackOverflowError当树的深度超过JVM的堆栈所能容纳的深度时。您可能需要使用迭代方法或尾递归相反,这是另一个主题;)

开心每一天1111

如果您使用的是Java1.7,则可以使用java.nio.file.Files.walkFileTree(...).例如:public&nbsp;class&nbsp;WalkFileTreeExample&nbsp;{ &nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Path&nbsp;p&nbsp;=&nbsp;Paths.get("/usr"); &nbsp;&nbsp;&nbsp;&nbsp;FileVisitor<Path>&nbsp;fv&nbsp;=&nbsp;new&nbsp;SimpleFileVisitor<Path>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;FileVisitResult&nbsp;visitFile(Path&nbsp;file,&nbsp;BasicFileAttributes&nbsp;attrs) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;IOException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FileVisitResult.CONTINUE; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Files.walkFileTree(p,&nbsp;fv); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;}}如果您使用的是Java 8,则可以使用流接口java.nio.file.Files.walk(...):public&nbsp;class&nbsp;WalkFileTreeExample&nbsp;{ &nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;(Stream<Path>&nbsp;paths&nbsp;=&nbsp;Files.walk(Paths.get("/usr")))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paths.forEach(System.out::println); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;}}
随时随地看视频慕课网APP

相关分类

Java
我要回答