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中快速的目录列表?
基本上:
- 如果你控制文件结构,我会尽量避免陷入这种情况。
- 在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
- 创build一个将
String
path作为参数的方法。 在该方法中: - 根据起始目录创build一个新的File对象
- 使用
listFiles
方法获取当前目录中的文件数组 - 循环播放文件数组
- 如果是文件,请继续循环
- 如果是目录,则打印出该名称并recursion到这个新的目录path中