當一個指定的文件被成功讀取,但文件內的數據是不正確的,比如格式不正確的XML,或者指定了錯誤變量或者缺少某個節的ini文件或類似的東西時,應該有什麼異常在那種情況下使用?在Java中可以讀取文件但文件數據格式不正確時應該使用什麼異常?
使用帶有詳細異常消息的IOException還是應該使用另一種異常?對於標準庫中的這種事件,似乎沒有一個好的異常類型。
當一個指定的文件被成功讀取,但文件內的數據是不正確的,比如格式不正確的XML,或者指定了錯誤變量或者缺少某個節的ini文件或類似的東西時,應該有什麼異常在那種情況下使用?在Java中可以讀取文件但文件數據格式不正確時應該使用什麼異常?
使用帶有詳細異常消息的IOException還是應該使用另一種異常?對於標準庫中的這種事件,似乎沒有一個好的異常類型。
這是一個風格問題,'技術上'不管你拋出什麼類型的異常;它可能是一個java.awt.FontFormatException
,javax.management.modelmbean.XMLParseException
或甚至只是一個標準java.lang.Throwable
與任何額外的信息,你把它。
話雖這麼說,正如其他人所建議的,它可能是一個更好的選擇,「滾你自己」:
public class InvalidFormatting extends java.lang.Throwable
{
/** The underlying error of this instance */
public final static String Error = "An invalid format has been detected";
/** Create a new {@code InvalidFormatting} exception */
public InvalidFormatting() {
super(InvalidFormatting.Error);
}
/**
* Create a new {@code InvalidFormatting} exception with additional information
*
* @param additionalMsg The additional information to append
*/
public InvalidFormatting(String additionalMsg) {
super(InvalidFormatting.Error + "\n" + additionalMsg);
}
}
然後,它可以作爲這樣的
throw new InvalidFormatting("here's some extra info");
希望可以幫助。
請勿使用IOException
- 文件已被打開併成功讀取;問題是它的內容。你可以拋出IllegalArgumentException
,或者創建你自己的異常類型。
如果找不到適合您需求的異常,請使用您自己的異常類型。 –
如果你的代碼說數據不正確,那麼你應該創建自己的異常並拋出它。否則,你正在使用一個庫,告訴你可能通過拋出異常來形成數據。 – wolfrevo
IOException的很多可能的一些子類,比如CharConversionExceptin或StreamCorruptedException,或者你自己創建的。 (你知道如何找到IOException的子類,對吧?) –