【问题标题】:Printing File list打印文件列表
【发布时间】:2014-11-23 16:35:46
【问题描述】:

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

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

这是输出

[Ljava.lang.String;@1540e19d

【问题讨论】:

  • 请为我们定义“绝对不正确”。
  • 好的。它是 [Ljava.lang.String;@1540e19d
  • 你得到一个字符串数组。遍历该数组,或使用System.out.println(java.util.Arrays.toString(f.list())); 将其打印出来
  • 好的。据我了解 f.list().toString 返回一个字符串数组。但是 f.list() 返回什么?
  • 不,f.list() 返回数组。您看到的是任何字符串数组的典型toString() 输出。 [ 表示数组。然后你会看到 String 的类名,然后是数组的哈希码。

标签: java list file directory


【解决方案1】:

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

你得到一个字符串数组。在 for 循环中遍历该数组

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

或用

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

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

【讨论】:

  • @MaximGotovchits:关键是使用 API,因为它会告诉你 File#list() 将返回什么,这里是一个字符串数组。
【解决方案2】:

要查找目录,您需要过滤列表。 listFiles() 是一种更好的使用方法,因为它返回文件对象列表而不是字符串,这最终更强大,并且允许测试“文件”是否是我相信你正在尝试做的目录。

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();
    }
}));

关于“不正确”输出的问题 [Ljava.lang.String;@1540e19d,这对于打印出原始数组是正常的,不像 Collection 类型通常具有良好的 toString() 实现。您可以使用实用方法java.util.Arrays.toString 来“漂亮打印”每个元素。

如果您需要递归列表,我会考虑使用更新的 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());

【讨论】:

  • 最佳答案。 1+
【解决方案3】:

这样做

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

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

Arrays.toString(f.list());

【讨论】:

    【解决方案4】:

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

    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:\\" );
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多