如何在Java中以递归方式列出文件夹中的所有文件?
不确定你想如何表示树?无论如何这里是一个使用递归扫描整个子树的例子.文件和目录是相同的.请注意,File.listFiles()为非目录返回null.
public static void main(String[] args) { Collectionall = new ArrayList (); addTree(new File("."), all); System.out.println(all); } static void addTree(File file, Collection all) { File[] children = file.listFiles(); if (children != null) { for (File child : children) { all.add(child); addTree(child, all); } } }
Java 7提供了一些改进.例如,DirectoryStream一次提供一个结果 - 调用者不再需要在执行之前等待所有I/O操作完成.这允许增量GUI更新,提前取消等.
static void addTree(Path directory, Collectionall) throws IOException { try (DirectoryStream ds = Files.newDirectoryStream(directory)) { for (Path child : ds) { all.add(child); if (Files.isDirectory(child)) { addTree(child, all); } } } }
请注意,dreaded null返回值已被IOException替换.
Java 7还提供了一个树木漫步者:
static void addTree(Path directory, final Collectionall) throws IOException { Files.walkFileTree(directory, new SimpleFileVisitor () { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { all.add(file); return FileVisitResult.CONTINUE; } }); }
import java.io.File; public class Test { public static void main( String [] args ) { File actual = new File("."); for( File f : actual.listFiles()){ System.out.println( f.getName() ); } } }
它显示模糊的文件和文件夹.
请参阅File类中的方法以对它们进行排序或避免目录打印等.
http://java.sun.com/javase/6/docs/api/java/io/File.html
查看Apache Commons FileUtils(listFiles,iterateFiles等).用于做你想做的事情和应用过滤器的便利方法.
http://commons.apache.org/io/api-1.4/org/apache/commons/io/FileUtils.html
您还可以使用FileFilter
界面过滤掉您想要的内容.最好在创建实现它的匿名类时使用它:
import java.io.File; import java.io.FileFilter; public class ListFiles { public File[] findDirectories(File root) { return root.listFiles(new FileFilter() { public boolean accept(File f) { return f.isDirectory(); }}); } public File[] findFiles(File root) { return root.listFiles(new FileFilter() { public boolean accept(File f) { return f.isFile(); }}); } }