Java,仅列出目录中的子目录,而不是文件

在Java中,如何仅列出目录中的子目录?

我想使用java.io.Filefunction,Java中这样做的最好方法是什么?

您可以使用File类来列出目录。

File file = new File("/path/to/directory"); String[] directories = file.list(new FilenameFilter() { @Override public boolean accept(File current, String name) { return new File(current, name).isDirectory(); } }); System.out.println(Arrays.toString(directories)); 

更新

作者在这篇文章的评论想要一个更快的方式,这里伟大的讨论: 如何检索Java中快速的目录列表?

基本上:

  1. 如果你控制文件结构,我会尽量避免陷入这种情况。
  2. 在Java NIO.2中,可以使用目录函数返回一个迭代器以允许更大的缩放比例。 目录stream类是可以用来遍历目录中的条目的对象。

一个非常简单的Java 8解决scheme:

 File[] directories = new File("/your/path/").listFiles(File::isDirectory); 

这相当于使用FileFilter(也适用于较旧的Java):

 File[] directories = new File("/your/path/").listFiles(new FileFilter() { @Override public boolean accept(File file) { return file.isDirectory(); } }); 

穆罕默德·曼苏尔,你差不多在那里……你所使用的“目标”论据实际上就是一条有效的道路,所以它总会回归真实。 为了查看孩子是否是一个子目录,你需要testing那个孩子。

 File file = new File("/path/to/directory"); String[] directories = file.list(new FilenameFilter() { @Override public boolean accept(File current, String name) { return new File(current, name).isDirectory(); } }); System.out.println(Arrays.toString(directories)); 

如果您对使用Java 7和NIO.2的解决scheme感兴趣,可以这样做:

 private static class DirectoriesFilter implements Filter<Path> { @Override public boolean accept(Path entry) throws IOException { return Files.isDirectory(entry); } } try (DirectoryStream<Path> ds = Files.newDirectoryStream(FileSystems.getDefault().getPath(root), new DirectoriesFilter())) { for (Path p : ds) { System.out.println(p.getFileName()); } } catch (IOException e) { e.printStackTrace(); } 

给一个起始目录作为一个String

  1. 创build一个将Stringpath作为参数的方法。 在该方法中:
  2. 根据起始目录创build一个新的File对象
  3. 使用listFiles方法获取当前目录中的文件数组
  4. 循环播放文件数组
    1. 如果是文件,请继续循环
    2. 如果是目录,则打印出该名称并recursion到这个新的目录path中