2015-04-23 3 views
0

У меня есть структура каталогов следующим образом:Невозможно получить доступ к файлам в директории

DB_SET 
-D1 
    - DB_1.txt 
-D2 
    - DB_2.txt 
-D3 
    - DB_3.txt 
-D4 
    - DB_4.txt 
-D5 
    - DB_5.txt 

Я хочу, чтобы хранить все DB_1.txt, DB_2.txt, DB_3.txt, DB_4.txt, DB_5.txt в ArrayList. Как я могу это сделать? Мой частичный код:

File folder = new File("./WebContent/datasets/DB_Set/"); 
File[] listOfFiles = folder.listFiles(); 
System.out.println("listofFiles: "+listOfFiles); 
ArrayList<File> sub_dir = new ArrayList<File>(); 
for (int i = 0; i < listOfFiles.length; i++) { 
    if (listOfFiles[i].isFile()) { 
     System.out.println("File " + listOfFiles[i].getName()); 
     } 
    else if (listOfFiles[i].isDirectory()) { 
     sub_dir.add(listOfFiles[i]); 
    } 
} 
+0

Не System.out печать имен файлов? –

ответ

0

Вам необходимо перейти на 2 уровня в глубину.

 File folder = new File("./WebContent/datasets/DB_Set/"); 
     File[] listOfSubDirectories = folder.listFiles(new FileFilter() { 
      @Override 
      public boolean accept(File file) { 
       return file.isDirectory(); 
      } 
     }); 
     ArrayList<File> filesList = new ArrayList<File>(); 
     for (File dir : listOfSubDirectories) { 
      File[] files = dir.listFiles(new FileFilter() { 
       @Override 
       public boolean accept(File file) { 
        return file.isFile(); 
       } 
      }); 

      for (File f : files) { 
       filesList.add(f);  
      } 
     } 
0

Создать FileFilter, реализующий принять, что-то вроде

boolean accept(File pathname) { 
    returns pathname != null && pathname.isFile(); 
} 

, а затем вызвать listFiles() с фильтром

File[] files = folder.listFiles(my_file_filter); 

и файлы должны содержать только файлы. Если вам нужно убедиться, что имена файлов заканчиваются на .txt (потому что в каталогах могут быть другие файлы), добавьте строчную проверку имени файла.

0

Другой подход к этому было бы аккумулировать файлы рекурсивно:

private static List<String> addFiles (File dir) { 
    List<String> result = new ArrayList<String>(); 
    for (File f : dir.listFiles()) { 
     if (f.isDirectory()) { 
      restult.addAll(addFiles(f)); 
     } else if (f.isFile()) { 
      result.add(f.getName()); 
     } else { // Just in case it's not a file or directory 
      // log or something 
     } 
    } 
} 

public static void main (String[] args) { 
    File folder = new File("./WebContent/datasets/DB_Set/"); 
    List<File> files = addFiles(folder); 
} 
Смежные вопросы