2012-07-04 86 views
1

這裏是我的代碼,我有一個非常簡單而中肯:用什麼來代替PrintWriter?

public void sendMessage(String message) 
{ 
    writer.println(message); 
    writer.flush(); 
} 

我真的不喜歡使用PrintWriter的原因也容易下嚥的IOExceptions,這真的是我的唯一的事情使用它除了發送字節數組。我可以使用什麼,不會消耗IOExceptions,並仍然會給我PrintWriter的功能?

+2

你需要什麼樣的功能?換行?格式化?自動沖洗? – Thilo

+0

我認爲沒有什麼不會吞下IOExceptions。如果嘗試/捕捉,如果你嘗試/捕捉打擾,可以使用封裝嘗試/捕獲的靜態方法 – mulax

+1

@mulax:他不抱怨它*拋出*異常,它*它不拋出異常 - 你必須查詢使用'checkError()'。 –

回答

4

我建議使用純WriterBufferedWriter

public void writeMessage(BufferedWriter bw, String message) throws IOException { 
    bw.write(message); 
    bw.newline(); 
    bw.flush(); 
} 

public void writeMessage(Writer writer, String message) throws IOException { 
    writer.write(message); 
    writer.write(System.lineSeparator()); 
    writer.flush(); 
} 

但很明顯,這取決於你想保留什麼PrintWriter功能。

+0

Writer和/或BufferedWriter是否傾向於禁止IOExcepitons? – John

+2

不是。閱讀javadocs:http://docs.oracle.com/javase/6/docs/api/java/io/BufferedWriter.html你會發現write()方法會拋出IOException異常 – Sujay

+0

事實上,兩個版本中的所有方法可以拋出IOException。 –

2

如果要保留PrintWriter並檢查是否發生任何異常,可以使用PrintWriter的checkError()方法來執行此操作。例如,使用您自己的代碼:

public void sendMessage(String message) 
{ 
    try{ 
     writer.println(message); 
    }finally{ 
      //checkError flushes the stream if it's not closed and checks its error state. 
     if(writer.checkError()){ 
      //Your error handling code here 
     } 
    } 
} 

另一種方法是使用BufferedReader作爲@Thilo在他的評論中提出的建議。它將再次取決於您希望保留的功能。

如果您使用BufferedWriter的實例,您可能會使用write()方法,這會引發IOException。 Read more about them in the javadocs here

相關問題