1.打印流的设计意图
打印流设计的主要目的是为了解决OutputStream的设计缺陷,属于OutputStream的加强版本,如果操作不是二进制数据,只是想通过程序向终端目标输出信息,则使用打印流更加方便。OutputStream存在以下缺陷:
1.1所有数据必须转换转换为字节数组
1.2如果需要输出int,double等类型很麻烦
2.设计一个简单的打印流
设计打印流,解决OutputStream存在的问题, 但是其本质莫有脱离OutputStream,只是对它的功能做了一个封装而已。
package JavaSe.Io;
import java.io.*;
//输出流的强化版本
//char-String-byte
class PrintUtil{
private OutputStream outputStream;
//由外部传入要输出的目标终端
public PrintUtil(OutputStream outputStream) {
this.outputStream = outputStream;
}
//核心功能
public void print(String data){
try {
this.outputStream.write(data.getBytes());//实际还是调用输出流的write方法,把字符串转成字节流
} catch (IOException e) {
e.printStackTrace( );
}
}
public void println(String data){
this.print(data+"\r\n");//txt文件中使用\r\n换行
}
public void print(int data) {
this.print(String.valueOf(data));
}
public void println(int data) {
this.println(String.valueOf(data));
}
public void print(double data) {
this.print(String.valueOf(data));
}
public void Println(double data) {
this.println(String.valueOf(data));
}
public void print(char data) {
this.print(
String.valueOf(data));
}
public void println(char data) {
this.println(String.valueOf(data));
}
public void Close() throws IOException {
outputStream.close();
}
}
public class printStream {
public static void main(String[] args) throws IOException {
PrintUtil printutil=new PrintUtil(new FileOutputStream(
new File(File.separator+"C:"+File.separator+
"Users"+File.separator+"齐灵惠"+File.separator+"Desktop"
+File.separator+"test.txt")));
printutil.print("姓名: ");
printutil.println("张三");
printutil.print("年龄: ");
printutil.println(18);
printutil.print("收入: ");
printutil.Println(10800.236);
printutil.print("特定字符: ");
printutil.println('k');
printutil.Close();
}
}
打印如下图:
重要提示: txt 文件中使用\r\n换行
3.使用系统提供的打印流
Java中提供了专门的打印流处理类;PrintStream(字节打印流),PrintWrite(字符打印流),使用Print Write几率更高一点。
PrintStream: public class PrintStream extends FilterOutputStream
常用构造: public PrintStream(OutputStream out)
PrintWrite: public class PrintWriter extends Writer
常用构造:public printWrite(OutputStream out),public PrintWrite (Write out )
类继承结构图:
package JavaSe.Io;
import java.io.*;
//打印流解决了OutputStream类的缺陷,装饰设计模式
//核心依然是OutputStream提供的Write()的功能,但是为了得到更好的操作效果,让其使用装饰类PrintStream
//支持更多的功能
public class TestPrintStream {
public static void main(String[] args) throws IOException {
File file=new File("C:\\Users\\齐灵惠\\Desktop\\wq.txt");
//PrintStream printStream=new PrintStream(new FileOutputStream(file));
//PrintWriter printWriter=new PrintWriter(new FileWriter(file));
PrintWriter printWriter= new PrintWriter(new FileOutputStream(file));
printWriter.print("李四");
printWriter.println(25);
printWriter.print(100000);
printWriter.println("haha");
printWriter.close();
}
}
打印如下图:
4.装饰设计模式
打印流的设计属于装饰设计模式:核心依然是OutputStream提供的write()功能,但是为了更好的操作实现,让其使用的装饰类PrintStream的功能更多一些。
优点:很容易更换装饰类来达到不同的操作效果
缺点:造成类结构复杂