2014-09-29 2 views
2

У меня возникли проблемы с попыткой распечатать список доступных каталогов. Вот мой код с комментариями:Печать Список файлов

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

Это выход

[Ljava.lang.String;@1540e19d 
+1

определить «абсолютно неверно» для нас пожалуйста. –

+0

Хорошо. Это [Ljava.lang.String; @ 1540e19d –

+1

Вы получаете массив String. Перейдите через этот массив или распечатайте его с помощью 'System.out.println (java.util.Arrays.toString (f.list()));' –

ответ

1

Чтобы найти каталоги, необходимо отфильтровать список. listFiles() - лучший метод для использования, поскольку он возвращает список объектов File, а не String, это в конечном счете более мощное и позволяет такие вещи, как тестирование, если «файл» - это каталог, который, я считаю, вы пытаетесь сделать.

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

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

В качестве альтернативы вы можете использовать FileFilter в listFiles(), это вернет примитивный массив файлов, которые вы можете изменить в список с Arrays.asList

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()); 
+0

Лучший ответ связки. 1+ –

0

это Л.Л. номер печати файлов, а также список файл в текущем каталоге:

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

Ваш выход, [Ljava.lang.String; @ 1540e19d, является типичным выходом toString() любого массива String. [означает массив. Затем вы видите имя класса для String, а затем hashcode массива.

Вы получаете массив строк. Перебрать этого массива в цикле

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

или распечатать его с

System.out.println(java.util.Arrays.toString(f.list())); 

Ключ должен использовать File API, как она расскажет вам, что File#list() вернется, здесь массив String.

+0

Спасибо =) Это работает. –

+0

@MaximGotovchits: ключ должен использовать API, так как он скажет вам, что вернет 'File # list()' здесь массив String. –

+0

Хорошо, как вы пожелаете =) –

0

ли это так

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

В качестве альтернативы вы можете использовать java.util.Arrays для преобразования String array возвращенное f.list() в строку как:

Arrays.toString(f.list()); 
Смежные вопросы