黑马程序员技术交流社区

标题: 求教PrintWriter这个类的具体用法 [打印本页]

作者: 冯越    时间: 2012-5-16 17:30
标题: 求教PrintWriter这个类的具体用法
本帖最后由 冯越 于 2012-5-16 17:32 编辑

我一直都有一个疑问,那就是关于PrintWrite这个类。这个类的具体作用到底是什么?在什么情况下使用?在《Thinking in java》P549 里有这样一个小例子。将System.out转换成PrintWrite
public class ChangeSystemout {
    public static void main(String[] args) {
          PrintWriter out = new PrintWriter(System.out, true);
          out.Println("Hello World");     //请问被包装过之后的System.out做这样的输出和System.out.println("Hello World")有什么区别?
}
}
output: Hello World
作者: 林豪    时间: 2012-5-16 17:46
其实看看API就清楚啦,System.out是标准输出流,输出的默认目标是控制台,可以通过System.getOut()改变输出目标。
PrintWriter out = new PrintWriter(System.out, true);输出的目标就是System.out也就是控制台,
作者: 冯越    时间: 2012-5-16 17:59
林豪 发表于 2012-5-16 17:46
其实看看API就清楚啦,System.out是标准输出流,输出的默认目标是控制台,可以通过System.getOut()改变输出 ...

你的意思是他们之间没区别? 重定向的话应该是 System.setOut()吧。
作者: 林豪    时间: 2012-5-16 18:05
没区别啦,因为你要打印的目标都是控制台   如果想改变默认的out输出位置 就用System.setout()就行了
作者: 韩慧阳    时间: 2012-5-16 18:07
/*“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
对于简单独立的 Java 应用程序,编写一行输出数据的典型方式是:
System.out.println(data)
public PrintWriter(OutputStream out, boolean autoFlush)通过现有的 OutputStream 创建新的 PrintWriter。此便捷构造方法创建必要的中间 OutputStreamWriter,后者使用默认字符编码将字符转换为字节。*/   //都是取子API的,感觉应该能看懂了吧??
System.out.println可以格式输出,但PrintWriter(OutputStream out, boolean autoFlush)是采用字符流输出的。有些时候其实两者没什么区别,但是在需要指定输出目标和输出流时就需要转换。   感觉这个挺不好解释的。

作者: 永恒之翼网络    时间: 2012-5-16 22:35
其实PrintWriter流是Writer流包装流,其目的是增强打印方法。因为Writer流是通过write方法写数据的,此方法只能操作String,char,char[],int这几种数据类型。PrintWriter流的print方法操纵所以的类型数据,包括对象,而且可以保证数据的原样打印。当遇到write方法操作不了的数据类型时,可以使用PrintWriter流。
“请问被包装过之后的System.out做这样的输出和System.out.println("Hello World")有什么区别?”
在本例中是没有区别的,原因是它们调用的是同一个流“System.out”,使用的是同样的方法"println"。其实System.out本来就是一个PrintWriter流, “PrintWriter out = new PrintWriter(System.out, true);”可以写成“PrintWriter out =System.out ”。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2