2011-10-30 64 views
0

我有一個簡單的servlet,如果它有一個查詢參數'hello',我寫入一個文件,因爲這是一個測試,我想顯示錯誤的網頁也。協助編寫我的servlet文件編寫器方法

的IntelliJ抱怨,我沒有趕上IOException異常,不知道什麼是錯的:

private static void WriteToFile(String filePath, String fileName, String fileData) { 

    FileWriter writer = null; 

    try { 
     writer = new FileWriter(fileName); 
     writer.write(fileData); 
    } catch(IOException ex) { 


    } finally { 
     if(writer != null) { 
      writer.close(); 
     } 

    } 


} 

而且,在我的例外,我在網絡上發現大多數人寫的:

我怎麼能輸出錯誤的網頁?

回答

5

當您在finally塊中調用writer.close();時,您並不追趕IOException

你也是完全吞嚥任何IOException拋出主代碼,這是一個非常糟糕的主意。如果出現問題,您將不知道發生了什麼。

我個人建議你讓那個方法拋出異常給調用者:

private static void writeToFile(String filePath, String fileName, 
           String fileData) throws IOException { 
    FileWriter writer = new FileWriter(fileName); 
    try {  
    writer.write(fileData); 
    } finally { 
    writer.close(); 
    } 
} 

注意,如果try塊拋出異常finally塊呢,你會有效地「輸「最初的例外。你可能想要在關閉時抑制異常拋出。

或者只是使用Guava,這使得它的Files類變得更簡單。

或者如果您使用Java 7,則可以使用try-with-resources statement

(我注意到你的方式忽略filePath - 爲什麼?)

+0

所以我需要嵌入另一個IOException異常在最後? – Blankman

+0

@Blankman:或者讓這個方法拋出'IOException',是的。 –

+0

啊!該文件名是一個錯誤,難怪我不能看到文件被保存在哪裏,嗯......並沒有拋出異常,所以它必須在我的文件系統somehwere ??? – Blankman

0

可以在catch塊也寫:writer.write(的errorMessage);

,或者您可能會重定向到錯誤頁面,如果出現錯誤