2011-02-25 90 views
3

在Java中,我可以在java中指定一個目錄並且它可以逐個讀取整個文件嗎?在一個文件夾中讀取整個文件

否則是否有辦法在java中讀取正則表達式文件?因此,如果該文件夾中的所有文件都始於gh001_12312 gh002_12312,gh003_12911,gh004_22222,gh005_xxxxx等

+1

@Andrew湯普森,很沒有道理的行爲。 – 2011-02-25 06:04:02

+0

有些時候,有些功能可能是您以前從未知道的神奇功能,但其他功能也可以 – aherlambang 2011-02-25 06:08:40

+0

我同意。就我個人而言,我並不知道@Pangea提到的API,並認爲它們看起來很有趣。 – 2011-02-25 06:35:46

回答

5

的標準Java庫提供了獲得File元件,其是在通過File#listFiles一個目錄的陣列的方法。 基本上:

File theDirectory = new File("/home/example"); 
File[] children = theDirectory.listFiles(); 

此外,存在一個重載方法,該方法允許指定的過濾器,其可用於在修剪列表中返回的元素。

File theDirectory = new File("/home/example"); 
File[] children = theDirectory.listFiles(new FileFilter(){ 
    public boolean accept(File file) { 
     if (file.isFile()) { 
      //Check other conditions 
      return true; 
     } 
     return false; 
    } 
}); 

如果您想根據文件名,做一些過濾以及再看看StringPatternMatcher。如果您知道只有文件或文件將遵循特定的命名約定,那麼還有一個File.listFiles(FilenameFilter)選項,它只提供表示文件名的字符串。

+0

是否有一種方法可以將BufferedReader讀取爲整個字符串,而不是執行input.readLine(),您必須逐行執行? – aherlambang 2011-02-25 06:42:56

+0

@EquinoX,不是我所知道的。 – 2011-02-26 22:40:40

3

您可以使用以下方法的組合從commons-io。第一種方法使您可以選擇迭代目錄中的所有文件,並遞歸匹配特定的擴展名(還有另一種重載方法允許您提供自己的過濾器)。第二種方法以String對象的形式讀取文件的全部內容。

Iterator<File> iterateFiles(File directory, 
              String[] extensions, 
              boolean recursive) 
String readFileToString(File file) 
           throws IOException 
+1

如果我不想使用commons-io – aherlambang 2011-02-25 05:47:14

+0

你可以在File(isDirectory(),listFiles()),FileNameFilter和BufferedReader ....幫助下做到這一點。 /www.exampledepot.com/egs/java.io/GetFiles.html – 2011-02-25 05:59:44

1

我從@Tim德爾這裏重用代碼:

首先得到如圖@Tim本德爾所需的所有文件的列表(在這裏再次顯示了完整)。並且不需要第三方庫。

File theDirectory = new File("/home/example"); 
File[] children = theDirectory.listFiles(new FileFilter(){ 
    public boolean accept(File file) { 
     if (file.isFile()) { 
      //Check other conditions 
      return true; 
     } 
     return false; 
    } 
}); 

現在遍歷這個數組,並使用文件讀取java.nio API在一個單一的去(不br.readLine()

public StringBuilder readReplaceFile(File f) throws Exception 
{ 
    FileInputStream fis = new FileInputStream(f); 
    FileChannel fc = fis.getChannel(); 

    int sz = (int)fc.size(); 
    MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz); 

    CharBuffer cb = decoder.decode(bb); 

    StringBuilder outBuffer = new StringBuilder(cb); 
    fc.close(); 
    return outBuffer; 
} 

希望這有助於

相關問題