2013-07-11 254 views
-1

有人可以幫我解決這個問題嗎?Java:檢查文件是否存在

我有一個方法,當運行時生成一些文件。這些文件可能需要幾秒鐘到幾分鐘的時間才能生成,所以每次我嘗試查看文件夾中的文件數量時,不要等待2分鐘,然後每秒鐘檢查最多2分鐘的文件數量上去。

如果在那2分鐘內文件數量沒有增加,我只想繼續使用方法的其餘部分,而不是拋出異常並退出。

問題是它第一次運行時,它得到new File(generatedFilesFolder).listFiles().length;它拋出一個空指針異常,因爲這時generatedFilesFolder是空的。

我可以在generate.next()之後做這個檢查,但是接下來我將不得不睡眠,這會打敗我想要存檔的內容。

請誰能告訴我一個更好的方法?我嘗試將int更改爲Integer,但仍然拋出異常。

int actualFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
generate.next(); 
///Now I want to give each file 2 minutes to generate otherwise catch and 
// carry on with rest of method. 
try { 
    int currentFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
    int counter = 0; 
    while ((currentFilesGenerated < actualFilesGenerated) & counter < 120) { 
    Thread.sleep(1000); 
    currentFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
    counter++; 
    System.out.println("actualFilesGenerated: " + actualFilesGenerated 
     + " currentFilesGenerated: " + currentFilesGenerated + "counter: " 
     + counter); 
    } 
} catch (InterruptedException e1) { 
    e1.printStackTrace(); 
} 
///rest of method here 
+0

用'File.exists()'方法檢查文件 – 2013-07-11 10:01:22

+0

'File f = new File(generatedFilesFolder);'then'currentFilesGenerated =(f.exists()== false) - 1:f.listFiles()。length' – 2013-07-11 10:03:30

回答

3

您可以使用File.exists()檢查的File

File f = new File(generatedFilesFolder) 
if(f.exists()) { 
    // file exists and do the operation 
} 
else { 
    f.createNewFile(); //or f.mkdir() to create directory 
} 
+0

如果'generatedFilesFolder'命名一個文件夾,可能是'f.mkdir()'。 – johnchen902

+0

@ johnchen902是的,我已經更新了答案。感謝您提出 – sanbhat

0

你可以使用存在的情況下()File類的方法來檢查,如果該文件存在, 例如

File f=new File(path); 
if(f.exists()) { 
    ..... 
} 
0

exist方法。因此,在您獲取文件列表之前,請檢查是否存在默認設置。

0

在使用它之前進行檢查。

File file = new File(generatedFilesFolder); 
if(file.exists() && file.isDirectory()) { 
     // do something 
} 
1

的問題是它運行時,它得到新的文件(generatedFilesFolder).listFiles()長度第一次。它會拋出一個空指針異常,因爲此時generatedFilesFolder是空的。

這不可能是真的。如果generatedFilesFolder實際上是一個目錄的路徑,但其中沒有文件,這不會拋出NPE,但會返回一個空數組。

因此,你需要纔去任何進一步生成目錄:

final File file = new File(generatedFilesFolder); 

if (file.exists()) { 
    if (!file.isDirectory()) 
     throw new IllegalStateException("not a directory"); 
} else { 
    if (!files.mkdirs()) 
     throw new IllegalStateException("cannot create directory"); 
} 

// go on 

最後:如果你使用的Java 7,忘記File。使用Files。其中有一個目錄觀察者...