2012-07-04 62 views
1

我有代碼看起來像:當我調用Reader.read()時,什麼可能導致Java中的IOException?

public static void func(Reader r){ 
    int c = r.read(); 
    ... 
} 

和編譯器告訴我,r.read()可能拋出IOException。在什麼情況下會發生這種情況?似乎很清楚,如果找不到一個文件類似FileNotFoundException被拋出,而是IOException相當含糊。

編輯:

在情況下,它是感興趣的人,我問這個問題,因爲我認爲必須有處理這種情況不僅僅是printStackTrace更好的辦法。但是,在不知道可能會導致異常的情況下,我不確定應該怎麼做。

回答

1

許多事情可能會導致一個IOException。當它被拋出時,你可以打印出來或檢查信息(Exception.getMessage()),看看是什麼造成的。

A FileNotFoundExceptionIOException的子類,您可以檢查"known subclasses" list爲他人。

+0

什麼特定的情況下可能會導致這樣的事情發生?這只是我一直在使用這個函數,而且我從未真正看到過之前拋出過'IOException'。 – math4tots

+1

如果讀者的基礎流進行編碼和讀取壞塊並pukes,如果底層流套接字流,而你正在閱讀的網絡死了,如果你試圖從一個已經關閉的流等閱讀。實際上有無數的特定實例,但它主要取決於你對'Reader.read()'和你的上下文的具體使用。在異常處理模式,它是一個通用*「的東西與流是錯誤的」 *例外的類型,顯然'閱讀()'是一個地方的東西可以去錯流。 –

1

它可以拋出IOException當任流本身是損壞或讀取數據的過程中出現一些錯誤即安全例外,權限拒絕等和/或一組被從IOEXception衍生例外的。

0

IOException異常是很多例外喜歡CharConversionException,CharacterCodingException和EOFException類的父類。

如果方法中列出的所有這些異常,然後調用者就必須抓住他們。所以爲了方便在throws子句中有IOException異常,可以幫助調用者避免多個catch塊。如果用戶希望通過檢查或exception.getMessage()的實例,仍然可以處理特定的異常。

+1

您可以通過使用System.out.println讓子類的名稱(exeption.getClass()); – nidomiro

0

如果你想知道的細節,在你的catch塊做到這一點:

catch (IOException e) 
{ 
    e.printStackTrace(); 
} 
1

例如:

public void load(InputStream inputStream) throws IOException { 
    this.inputStream = inputStream; 
    this.properties.load(this.inputStream); 
    this.keys = this.properties.propertyNames(); 
    inputStream.close(); 
} 

我認爲這是當你有輸入的問題/輸出(連接)由於安全性或例如不開放流。

代碼源:計算器

0

此代碼將幫助您調試和看到拋出IOException異常:

String NL = System.getProperty("line.separator"); 
String line; 
FileInputStream in; 
try { 
     fileName = choose.getSelectedFile().getCanonicalPath(); 
} catch (IOException e) { 
     e.printStackTrace(); //This doesn't matter, see the second IOException catch. 
} 

try { 
in = new FileInputStream(choose.getSelectedFile()); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 
StringBuffer content=new StringBuffer(""); 

while((line = reader.readLine()) != null){ 
    content.append(line+NL); 
} 

    textArea.setText(content.toString()); 
    reader.close(); 
    reader.readLine(); 

} catch (FileNotFoundException e) { 
      JOptionPane.showMessageDialog(new JFrame(), "The file does not exist!", "Error", JOptionPane.WARNING_MESSAGE); 
} catch (IOException e) { 
      JOptionPane.showMessageDialog(new JFrame(), "There was an error in reading the file.", "Error", JOptionPane.WARNING_MESSAGE); 
} 

好運。

相關問題