2012-08-01 101 views
0

我想知道是否有辦法知道文件是否存在,如果我只知道目錄結構的路徑和文件的部分名稱。Java:部分路徑存在與文件的部分名稱

舉例來說,我想檢查以下tar.gz文件存在以下路徑:

/home/rah/data/download/lib/[email protected]@20120731.0.tar.gz 

我只想我的程序走,當我知道

path = /home/rah/data/download/lib/ 
partial file name = [email protected]@20120731 

(注意我錯過了「0.tar.gz」)。事實上,我不想在文件名中的日期之後計算0(它可以是任何值0,1,2,3 ...)。

所以我想這個工作:

if(filename.canRead()) { 
// 
} 

如果文件名是一樣的東西: 「測試@ 4.3-00 @ 20120731 名爲.tar.gz」 其中STAR()可以是任何數量的

我該怎麼辦?或者可以檢查是否存在部分路徑,例如

/home/rah/data/download/lib/[email protected]@20120731?

謝謝。

回答

2

以及你必須做手工,列出倒在文件夾中的所有文件,並比較每個文件開始與您匹配的標準,

佛公io的,你可以做以下

FileUtils.listFiles(new File("/home/"), new PrefixFileFilter("data"), null) 
3

您可以編寫一個FileFilter並將其提供給File.listFiles()方法。粗略地說,它看起來像這樣:

File dir = new File("/home/rah/data/download/lib/"); 

// list the files using a anonymous FileFilter 
File[] files = dir.listFiles(new FileFilter() { 

    @Override 
    public boolean accept(File file) { 
     return file.getName().startsWith("[email protected]@20120731"); 
    } 
}); 
+3

還可以查看Apache Commons IO的一些有用的可重用過濾器。對於這種情況,請使用PrefixFileFilter和SuffixFileFilter:http://commons.apache.org/io/api-release/index.html?org/apache/commons/io/filefilter/package-summary.html – 2012-08-01 09:51:45

1

是的。你會想看看FileFilter

的基本思想是使用所述File.listFiles方法,傳入您過濾&檢查,以查看所得到的數組是0的長度或不

與例如@ OP的修訂請求

這是比較簡單,正如其他人已經指出的那樣。

File path = new File("/home/rah/data/download/lib"); 
File[] listFiles = path.listFiles(new FileFilter() { 

    @Override 
    public boolean accept(File file) { 

     String name = file.getName().toLowerCase(); 
     return name.startsWith("[email protected]@20120731"); 

    } 

}); 

if (listFiles.length == 0) { 

    // File does not exit 

} else { 

    // File exists 

} 

你真的應該構建自己的FileFilter您可以在String你需要匹配,但我會離開,到

由於還指出,你可以看看Apache的CommonIO API中傳遞

+0

感謝您的回覆。在更新我的問題後,我看到了您的答案。你能給我示例代碼嗎?謝謝。 – user981116 2012-08-01 09:54:29