Java:如何一行代码列出目录中的所有文件夹?

5

列出 TXT 文件的一行命令。

import java.io.File;
import java.io.FilenameFilter;
...
files = dir.listFiles(new FilenameFilter() {
           public boolean accept(File dir, String name) {
                return name.toLowerCase().endsWith(".txt");
                }
           }
        );

源代码。

有没有一行命令可以列出目录中的目录?


9
当"one"的值非常大时... - Michael Myers
4个回答

5
public static void main (String[] args)  throws Exception {
    File dir = new File("yourDir");

    FileFilter fileFilter = new FileFilter() {
        public boolean accept(File file) {
            return file.isDirectory();
        }
    };

    File[] files  = dir.listFiles(fileFilter);

    for (File f : files)
        System.out.println( f.getName() );
}

4

这个代码使用了Commons IO,但实际上是列出所有目录名称的最简单方法。它还有一组更强大的过滤器,可用于其他目的:

String[] dirNames = new File("/Users/jonathan").list(DirectoryFileFilter.INSTANCE);
for (String dirName: dirNames) 
    System.out.println("Directory Name: " + dirName);

3
import java.io.File;
import java.io.FileFilter;
...
files = dir.listFiles(new FileFilter() { 
       public boolean accept(File pathname) { 
            return pathname.isDirectory();
       } 
    });

注意使用 listFiles(FileFilter) 而不是 listFiles(FilenameFilter)

0
你需要导入Java 1.7及以上版本中可用的java.nio.file.Files和java.nio.file.Paths。然后使用Java 1.8中引入的流(Streams),你可以像下面这样做:
Files.list(Paths.get(".")).filter(x -> Files.isDirectory(x)).forEach(System.out::println);

这个代码会获取当前目录下的文件,列出它们,并过滤掉非目录的文件,然后通过迭代目录流并使用println方法引用将它们打印出来。
实际上,你也可以使用方法引用来过滤文件,如下所示:

Files.list(Paths.get(".")).filter(Files::isDirectory).forEach(System.out::println);


1
作为第一个真正的一行代码,这个看起来确实需要解释前提条件、假设、限制以及可能的核心技巧,即使没有大量的“one”,也能将其压缩成一行。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接