2015-04-23 34 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.txtDB_2.txtDB_3.txtDB_4.txtDB_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); 
}