打印文件列表

时间:2014-09-29 10:02:44

标签: java list file directory

我在尝试打印可用目录列表时遇到了一些问题。 这是我的代码和评论:

File f = new File(System.getProperty("user.home"));
System.out.println(f.list().toString()); //the output here is absolutely incorrect

这是输出

[Ljava.lang.String;@1540e19d

4 个答案:

答案 0 :(得分:4)

您的输出[Ljava.lang.String; @ 1540e19d,是任何String数组的典型toString()输出。 [表示阵列。然后你会看到String的类名,然后是数组的hashcode。

你得到一个String数组。在for循环中迭代该数组

for (String fileName : f.list()) {
    System.out.println(fileName);
}

或用

打印出来
System.out.println(java.util.Arrays.toString(f.list()));

关键是使用File API因为它会告诉你File#list()将返回什么,这里是一个String数组。

答案 1 :(得分:1)

要查找目录,您需要过滤列表。 listFiles()是一个更好的方法,因为它返回一个File对象而不是String的列表,这最终会更强大,并允许测试" file"是一个我相信你正在努力做的目录。

File home = new File(System.getProperty("user.home"));

for (File file : home.listFiles()) {
    if (file.isDirectory()) {
        System.out.println(file);
    }
}

或者您可以在listFiles()中使用FileFilter,这将返回File的原始数组,您可以将其更改为带有Arrays.asList的List

List<File> directories = Arrays.asList(home.listFiles(new FileFilter() {

    @Override
    public boolean accept(File pathname) {
        return pathname.isDirectory();
    }
}));

关于&#34;错误&#34;的问题output [Ljava.lang.String; @ 1540e19d,这对于打印原始数组是正常的,不像Collection类型通常有一个很好的toString()实现。您可以使用实用方法java.util.Arrays.toString来实现&#34;漂亮的打印&#34;每个元素。

如果您需要递归列表,我应考虑使用较新的java.nio.Files.walk()功能,而不是编写自己的递归方法。

List<Path> paths = Files.walk(home.toPath()).filter(new Predicate<Path>() {
            @Override
            public boolean test(Path path) {
                return path.toFile().isDirectory();
            }
        }).collect(Collectors.toList());

或者更简洁地使用Java 8闭包。

List<Path> paths = Files.walk(home.toPath()).filter((path) -> path.toFile().isDirectory()).collect(Collectors.toList());

答案 2 :(得分:0)

这个ll打印数字文件以及列出当前目录中的文件:

File f = new File(System.getProperty("user.home"));
System.out.println(f.list().length);

for (String fileName : f.list()) {
    System.out.println(fileName);
}

如果您要列出包含subdirectory及其文件的文件:

public void listFiles( String path ) {

        File root = new File( path );
        File[] list = root.listFiles();

        for ( File f : list ) {
            if ( f.isDirectory() ) { // check that if current instance is file or directory
                listFiles( f.getAbsolutePath() );
                System.out.println( "Dir:" + f.getAbsoluteFile() );
            }
            else {
                System.out.println( "File:" + f.getAbsoluteFile() );
            }
        }
    }

    public static void main(String[] args) {
        Test t = new Test();
        fw.listFiles("c:\\" );
    }

答案 3 :(得分:0)

这样做

File f = new File(System.getProperty("user.home"));
  String tok[]=f.list();
  for(String s:tok){
      System.out.println(s);
  }

或者,您可以使用java.util.ArraysString array返回的f.list()转换为字符串:

Arrays.toString(f.list());