打印流主要解决的就是OutputStream的设计缺陷,属于OutputStream功能的加强版。如果你现在不是操作的二进制数据,向终端发送消息:
缺点一:所有的数据必须变为字节数组,
缺点二:如果要输出的是int double等类型就不方便了
打印流
打印流的设计目的主要是解决OutputStream的设计问题,其本质不可能脱离OutputStream
范例:打印流模型
1 package cn.Tony.demo; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 8 9 class PrintUtil{ //自己编写一个类,希望这个类可以提供更多的输出支持 10 private OutputStream output; 11 public PrintUtil(OutputStream output) {//由外部决定输出的位置 12 this.output=output; 13 } 14 public void print(String str) { 15 try {//核心功能 16 output.write(str.getBytes()); 17 } catch (IOException e) { 18 // TODO Auto-generated catch block 19 e.printStackTrace(); 20 } 21 } 22 public void println(String str) { 23 this.print(str+" "); 24 } 25 public void print(int data) { 26 this.print(String.valueOf(data)); 27 } 28 public void println(int data) { 29 this.println(String.valueOf(data)); 30 } 31 public void print(double data) { 32 this.print(String.valueOf(data)); 33 } 34 public void println(double data) { 35 this.println(String.valueOf(data)); 36 } 37 public void close() { 38 try { 39 this.output.close(); 40 } catch (IOException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 } 44 } 45 } 46 47 public class TestDemo{ 48 public static void main(String[] args) throws Exception { 49 PrintUtil pu=new PrintUtil(new FileOutputStream(new File("D:"+File.separator+"IO"+File.separator+"data.txt"))); 50 pu.print("姓名:"); 51 pu.println("啊于!"); 52 pu.println(1+10); 53 pu.println(1.2+10.3); 54 pu.close(); 55 } 56 }
java中有提供的专门打印流处理类:PrintStream PrintWriter
打印流有字节打印流:PrintStream 字符打印流:PrintWriter 以后使用PrintWriter的几率很高。但是这两者使用形式是相同的。
此时的感觉很像代理设计模式,但是代理设计有如下特点:
代理是以接口为使用原则的设计模式;
最终用户可以调用的方法一定是接口所定义的方法
打印流的设计属于装饰设计模式,核心依然是某一个类的功能,但是为了得到更好的操作效果,让其支持的功能更多一些,
范例:使用打印流
1 package cn.Tony.demo; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.PrintWriter; 6 7 public class TestDemo{ 8 public static void main(String[] args) throws Exception { 9 PrintWriter pu=new PrintWriter(new FileOutputStream(new File("D:"+File.separator+"IO"+File.separator+"data.txt"))); 10 pu.print("姓名:"); 11 pu.println("啊于!"); 12 pu.println(1+10); 13 pu.println(1.2+10.3); 14 pu.close(); 15 } 16 }
以后的开发做之中一定会用到打印流。
格式化输出
C语言有一个printf()函数,这个函数在输出的时候可以使用一些占位符,例如:字符串(%s),数子(%d)小数(m.nf)字符(%c)从JDK1.5开始PrintStream类中也追加同样的方式,使用的printf()方法。
格式化输出:public PrintWriter printf(String format,Object... args)
范例:观察格式化输出
1 package cn.Tony.demo; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.PrintWriter; 6 7 public class TestDemo{ 8 public static void main(String[] args) throws Exception { 9 String name="顾里鸭"; 10 int age=20; 11 double salary=-100000.5584151615; 12 PrintWriter pu=new PrintWriter(new FileOutputStream(new File("D:"+File.separator+"IO"+File.separator+"data.txt"))); 13 pu.printf("姓名:%s,年龄:%d,工作:%8.2f",name,age,salary); 14 pu.close(); 15 } 16 }
同时在String类里面也追加有一个格式化字符串方法
格式化字符串:public static String format(Locale l,String format,Object... args)
范例:格式化字符串
1 package cn.Tony.demo; 2 3 public class TestDemo{ 4 public static void main(String[] args) throws Exception { 5 String name="顾里鸭"; 6 int age=20; 7 double salary=-100000.5584151615; 8 System.out.println( String.format("姓名:%s,年龄:%d,工作:%8.2f",name,age,salary)); 9 } 10 }