阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第18章: 输入与输出支持:课时84:打印流
如果现在要想通过程序实现内容的输出,核心的本质一定要依靠OutputStream类完成,但是OutputStream类有一个最大的缺点,这个类中的数据输出操作功能有限:public void write(byte[] b) throws IOException,所有的数据一定要转为字节数组后才可以输出,于是假设说现在你的项目里面可能输出的是long、double、Date,在这样的情况下就必须将这些数据变为字节的形式来处理,这样的处理一定是非常麻烦的,所以在开发之中最初的时候为了解决此类的重复操作,往往会由开发者自定义一些功能类以简化输出过程。
范例:打印流设计思想
package cn.mldn.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "mldn.txt"); // 定义操作文件
PrintUtil pu = new PrintUtil(new FileOutputStream(file));
pu.println("姓名:小强子");
pu.print("年龄:");
pu.println(78);
pu.close();
}
}
class PrintUtil implements AutoCloseable { // 实现一些常用数据的输出
private OutputStream output; // 不管你现在如何进行输出操作,核心使用的就是OutputStream
public PrintUtil(OutputStream output) { // 由外部来决定输出的位置
this.output = output;
}
@Override
public void close() throws Exception {
this.output.close();
}
public void println(long num) {
this.println(String.valueOf(num));
}
public void print(long num) {
this.print(String.valueOf(num));
}
public void print(String str) { // 输出字符串
try {
this.output.write(str.getBytes()); // 输出
} catch (Exception e) {
e.printStackTrace();
}
}
public void println(String str) {
this.print(str + "\r\n");
}
}
在整个的操作过程之中打印流的设计思想的本质在于:提高已有类的功能,例如:OutputStream是唯一可以实现输出的操作功能准类,所以应该以其为核心根本,但是这个类输出的操作功能有限,所以不方便进行输出各个数据类型,那么就为它做出了一层包装,所以此时采用的设计思想就是“装饰设计模式”。
但是既然所有的开发者都已经发现了原始中的OutputStream功能的不足,设计者也一定可以发现,所以为了解决输出问题,在java.io包里面提供有打印流:PrintStream、PrintWriter。
PrintStream | PrintWriter |
---|---|
public class PrintStream extends FilterOutputStream implements Appendable,Closeable | public class PrintWriter extends Writer |
public PrintStream(OutputStream out) | public PrintWriter(OutputStream out)、public PrintWriter(Writer out) |
下面使用PrintWriter来实现数据的输出操作。
范例:数据输出
package cn.mldn.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "mldn.txt"); // 定义操作文件
PrintWriter pu = new PrintWriter(new FileOutputStream(file));
pu.println("姓名:小强子");
pu.print("年龄:");
pu.println(78);
pu.close();
}
}
从JDK1.5开始PrintWriter类里面追加有格式化输出的操作支持:public PrintWriter printf(String format,Object… args)
范例:格式化输出
package cn.mldn.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "mldn.txt"); // 定义操作文件
PrintWriter pu = new PrintWriter(new FileOutputStream(file));
String name = "小强子子";
int age = 78 ;
double salary = 72823.6323113 ;
pu.printf("姓名:%s、年龄:%d、收入:%9.2f", name,age,salary);
pu.close();
}
}
比起直接使用OutputStream类,那么使用PrintWriter、PrintStream类的处理操作会更加的简单。以后只要是程序进行内容输出的时候全部使用打印流。
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时101:反射实例化对象
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第18章: 输入与输出支持:课时84:打印流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时102:反射与工厂设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时75:Writer字符输出流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时83:RandomAccessFile
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第26章:反射与代理设计模式:课时118:动态代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第23章:反射与类操作:课时105:反射调用构造方法(含关系图-重要)
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时82:管道流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第25章:ClassLoader类加载器:课时115:ClassLoader类加载器简介