九、Java IO流之打印流
程序员文章站
2022-04-03 18:01:18
...
在java.io包里面最为原始的输出支持的操作方法是:OutputStream.write()、Writer.write(),但是这两个操作方法都有问题,功能设计上不足,因为这两个操作只支持字符串或字节数组的输出,但是从实际的开发来讲,输出的操作可能有各种数据类型。
现在假设说要求你设计一个类,这个类可以实现各种数据类型的输出。
例:最初的设计方案
import java.io.*;
class PrintUtil implements Closeable{
private OutputStream output;
public PrintUtil(OutputStream output) { //设置输出的位置
this.output = output;
}
public void print(String str){
try {
this.output.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
public void print(int num){
this.println(String.valueOf(num));
}
public void println(String str){
try {
this.print(str+"\r\n");
} catch (Exception e) {
e.printStackTrace();
}
}
public void println(int num){
this.println(String.valueOf(num));
}
@Override
public void close() throws IOException {
this.output.close();
}
}
public class TestDemo_10 {
public static void main(String[] args)throws Exception {
PrintUtil pu = new PrintUtil(new FileOutputStream(new File("d:"+File.separator+"zzTest.txt")));
pu.println("姓名:呵呵");
pu.print("年龄:");
pu.println(33);
pu.close();
}
}
执行结果:
此时的代码只是调用的形式简化了,但是本质上并没有发生任何的改变。那么这样的设计思想就称为装饰设计模式。我们都已经知道OutputStream类的输出操作不方便了,那么Java设计人员也一定明白。
那么为此提供了两个输出功能类:
PrintStream、PrintWriter
观察这两个类的定义以及构造方法:
PrintStream
定义:
public class PrintStream extends FilterOutputStream implements Appendable, Closeable
构造方法:
PrintStream(OutputStream out)
创建新的打印流。
PrintWriter
定义:
public class PrintWriter extends Writer
构造方法:
PrintWriter(OutputStream out)
根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
PrintWriter(Writer out)
创建不带自动行刷新的新 PrintWriter。
例:使用打印流输出
public class TestDemo_10 {
public static void main(String[] args)throws Exception {
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("d:"+File.separator+"zzTest.txt")));
pw.println("姓名:哈哈");
pw.print("年龄:");
pw.println(33);
pw.close();
}
}
执行结果:
JDK1.5之后,String类提供有format()字符串格式化方法,实际上在PrintStream、PrintWriter类里面也提供有格式化的输出操作方法:
PrintWriter printf(String format, Object... args)
使用指定格式字符串和参数将格式化的字符串写入此 writer 的便捷方法。
例:格式化输出
public class TestDemo_10 {
public static void main(String[] args)throws Exception {
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("d:"+File.separator+"zzTest.txt")));
String name = "嘿嘿";
int age = 33;
double score=100.1234567;
pw.printf("姓名:%s、年龄:%d、分数:%5.2f",name,age,score);
pw.close();
}
}
执行结果:
是不是找到了C语言的感觉
在以后程序进行(非二进制数据)内容输出的时候,优先考虑使用打印流完成,如果有中文建议使用PrintWriter
OutputStream只适合于输出二进制数据,如果是明文的数据一定要使用打印流完成。
打印流采用的是装饰设计模式
上一篇: 微信如何查看微信视频号热搜?
推荐阅读
-
Java IO流之字节流
-
Java基础--常用API--IO流相关API
-
J02-Java IO流总结二 《概述》
-
J03-Java IO流总结三 《 FileInoutStream和FileOutputStream 》
-
J04-Java IO流总结四 《 FileReader和FileWriter 》
-
J01-Java IO流总结一 《异常捕获》
-
J05-Java IO流总结五 《 BufferedInputStream和BufferedOutputStream 》
-
Java8之Stream流代替For循环操作
-
java8新特性之stream流中reduce()求和知识总结
-
Java IO流之原理分类与节点流文件操作详解