2012-07-04 90 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

相关问题