2016-02-29 118 views
0

我從文件夾中加載一些文件的名稱file 1.pdffile 2.pdf等 我想加載它們到我的程序。如果我新的人的總數,我想做某事,如:如何檢查是否沒有其他文件存在

for(int i=1; i<=100; i++){ 
    File pdfFile = new File("file "+i+".pdf"); 
    //... 
} 

但我不知道總數..會是什麼狀況,所以當沒有其他文件,然後退出?

do{ 
     File pdfFile = new File("file "+i+".pdf"); 
     //... 
}while(//there are files...) 

回答

7

有兩種方法這一點 - 你可以簡單地不斷遞增的計數器,直到你得到不存在的文件,即

int i = 1; 
File file; 
while((file = new File("file "+i+".pdf")).exists()) { 
    // do whatever 
    ++i; 
} 

的恕我直言不太笨拙的方法是簡單地重複覆蓋特定目錄中的所有文件,並忽略那些名稱與您的模式不匹配的文件(即除非您處理文件的順序非常重要)。

+1

這是如何工作的?因爲'.exists()'返回一個布爾值?編輯:我看到它應該如何工作,但你錯過了')'。 – martijnn2008

+0

@ martijnn2008'exists'如果文件存在則返回true,是的。這依賴於Java中的賦值,如C和C++中的賦值,實際上是一個具有值而不是語句的表達式(具體而言,它具有賦值的值)。 – Cubic

0

你應該算號文件到文件夾

new File(<directory path>).listFiles().length 
+0

如果有目錄 – user43968

1

你可以捕捉異常,並打破while循環。本來我已經回答了:

boolean success = true; 
int i = 0; 

while(success){ 

    i = i + 1; 

    try{ 
     File pdfFile = new File("file " + i + ".pdf"); 
    } catch(FileNotFoundException ex){ 
     success = false; 
    } 
} 

但我被告知構造函數不會拋出異常,所以這是行不通的。因此,您最好使用下面的答案,作爲另一個用戶(@cubic)的建議。

int i = 0; 
File file; 

while((file = new File("file " + i + ".pdf")).exists()){ 
    // something with file 
    i++; 
} 
+4

它不」等文件(不PDF例如)不起作用看起來這樣會有所幫助。當文件不存在時,構造函數不會引發異常(請參閱http://stackoverflow.com/questions/1816673/how-do-i-check-if-a-file-exists-in-java) – Breeze

+0

啊,我不知道!我會編輯這個。 – JCollerton

+1

您的答案的第二部分已經由其他人給出,並且最初是錯誤的。 – martijnn2008

1

如果您有機會獲得依賴的Apache下議院IO,你的代碼應該是這樣的:

File dir = new File("C:\\Users\\your.directory\\"); 
FileFilter fileFilter = new WildcardFileFilter("file *.pdf"); 
File[] files = dir.listFiles(fileFilter); 
for(File file : files){ 
    System.out.println(file.getAbsolutePath()); 
} 
+0

這是真的......而且似乎我不能在通配符篩選器中使用正則表達式...... – GustavoCinque