2012-12-25 20 views
0

我從不同的Windows服務器獲取directoreis和文件的總字節數,但不確定是否需要在這兩種方法中使用try catch塊?請幫助它需要一個try catch塊

private void retrieveTotalBytes(File sourceFile) 
{ 
    File[] files = sourceFile.listFiles(); 
    for(File file : files) 
    { 
     if(file.isDirectory()) 
      retrieveTotalBytes(file); 
     else totalBytes += file.length(); 
    } 
} 

private void copyFiles(File sourceFile, File targetFile) throws IOException 
{ 
    if(sourceFile.isDirectory()) 
    { 
     if(!targetFile.exists()) targetFile.mkdirs(); 

     String[] filePaths = sourceFile.list(); 
     for(String filePath : filePaths) 
     {         
      File srcFile = new File(sourceFile, filePath); 
      File destFile = new File(targetFile, filePath); 

      copyFiles(srcFile, destFile); 
     } 
    } 
    else 
    { } 
} 
+2

我看不到任何理由關閉此問題 –

+0

@PreetSangha,同意。這是一個合理的問題......在這個問題上你是個不錯的人 –

+0

你的意思是「需要」是什麼意思?爲了代碼編譯?或爲了漂亮? – yankee

回答

1

你有幾種選擇。

1)捕獲和處理(創建需要在這個低級別登錄)。

這只是一個真正的解決方案,如果該錯誤是無關的代碼的操作(它可能不是)

2)捕獲和重新擲作爲一個應用程序特定的異常。

這允許您在「ApplicationException」樹中構建異常並將其與其他異常一起捕獲。

3)捕獲並重新拋出RuntimeException。

由於您可能已經做了所有檢查以確保文件可讀,目錄是可管理的等,所以沒有實際的理由來拋出錯誤。如果它拋出一個,你可能無法從中恢復。如果你不能,你最終會拋出'IOException'一直到堆棧,這是愚蠢的。

相反,您可以將此「不可恢復的」作爲RuntimeException重新拋出,並在非常高的級別捕獲它,查找對話框並崩潰。

4)拋出純IO異常並將問題傳遞給鏈。

這不是解決問題,它只是將它移動到應用程序中(並允許IOException滲入到您的代碼庫中)。

2

我不認爲你需要這些功能裏面,因爲它們是低(假定客戶端是足夠聰明,使這些負責任的決定)。但是你可能會考慮在更高層次上調用這些函數。例如

。 。 。

File data, destination; 

try { copyFiles(data, destination); } 
catch (IOException e) { . . . } 


// and. . . 

try { retrieveTotalBytes(data); } 
catch (Exception e) { . . . }; 

。 。 。但這取決於你