欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第18章: 输入与输出支持:课时84:打印流

程序员文章站 2022-07-04 19:30:59
...

如果现在要想通过程序实现内容的输出,核心的本质一定要依靠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。
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第18章: 输入与输出支持:课时84:打印流

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学习路线

推荐阅读