Java装饰者模式(设计模式)与缓冲字符输入流(LineNumberReader)和打印流
2018-02-02 19:19
585 查看
一、装饰者模式
1.定义:一种思想,通过装饰,对原来功能进行升级 2.装饰者模式流程 a.把被装饰者,写成成员变量 b.构造方法中,给该成员变量赋值 c.对原有功能进行升级 3.继承也可以实现功能的升级,那么装饰者模式好处 a.高内聚(类中方法之间的联系--联系最后紧密) b.低耦合(解耦)(类和类之前,尽量不要产生联系) 例题1:使用LineNumberReader public static void fun1() throws FileNotFoundException, IOException { FileReader fr = new FileReader("/Users/lanou/Desktop/tes/znb.txt"); LineNumberReader lnr = new LineNumberReader(fr); //设置行号 lnr.setLineNumber(101); String string = ""; while((string = lnr.readLine()) !=null) { System.out.println(lnr.getLineNumber()+":"+string); }lnr.close(); } 例题2:利用装饰者,实现LineNumberReader public static void fun2() throws FileNotFoundException, IOException { //使用字节的类读取文件 FileReader fr = new FileReader("/Users/lanou/Desktop/tes/znb.txt"); wsLineNumberReader lnr = new wsLineNumberReader(fr); // 设置行号 lnr.setNum(100); //循环读取 String string = ""; while((string = lnr.myRead())!=null) { System.out.println(lnr.getNum()+":"+string); } lnr.myClose(); }
class wsLineNumberReader { //将被修饰这写成成员变量 private Reader reader; //记录行号 private int num = 0; public wsLineNumberReader() { // TODO Auto-generated constructor stub } public wsLineNumberReader(Reader reader) { super(); this.reader = reader; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String myRead() throws IOException { //方法走了几次,就是几行 num++; //功能升级 StringBuilder stringBuilder = new StringBuilder(); //把读出的字节拼接成字符串 int len = 0; while((len = reader.read())!=-1) { //进行拼接 //遇到换行,这一行字符串,已经拼接完毕,返回就行 if (len =='\n') { return stringBuilder.toString(); }else { //不换行就拼接字符串 stringBuilder.append((char)len); } } //如果stringBuilder等于0, //读完了,没什么可拼接的 if(stringBuilder.length()==0) { return null; } return stringBuilder.toString(); } //关闭资源 public void myClose() throws IOException { reader.close(); } }
二、打印流(只能输出-原样输出)
1.PrintStream--字节打印流 构造方法可接受的参数: a.文件 b.字节输出流(OutputStream) c.文件路径 2.PrintWriter--字符打印流 3.特点 a.只能作为数据的目的地 b.可以把数据原样输出 c.永远不会抛出IO异常,但会抛出其他异常 d.相当于Print打印流类,可以给其他流类对象,装饰一个原样输出的功能 例题1: public static void fun1() throws FileNotFoundException { //创建文件 File file =new File("/Users/lanou/Desktop/tes/haha.txt"); //创建一个缓冲字节输出流 FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); //创建打印流 PrintStream ps = new PrintStream(bos); // 调用写字符串的方法 ps.println("wanglong"); ps.println(true); ps.println(100); ps.println(3.5); ps.println("p"); ps.write(100); ps.close(); } 例题2: 打印字符流 public static void fun2() throws FileNotFoundException { //创建文件 File file =new File("/Users/lanou/Desktop/tes/haha.txt"); //创建一个缓冲字节输出流 FileOutputStream fos = new FileOutputStream(file); PrintWriter pw = new PrintWriter(fos); pw.println("nihao"); pw.println(11); pw.println(true); pw.write(78); pw.flush(); pw.close(); }
相关文章推荐
- Java之打印流、装饰者模式以及LineNumberReader的使用
- Java中的装饰者模式、LineNumberReader、打印流(基础解析)
- 黑马程序员——Java基础——IO流、字符流、字节流、缓冲区技术、装饰设计模式、LineNumberReader等
- 黑马程序员——学习Java基础之 io LineNumberReader 之装饰设计模式
- 黑马程序员——21,字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader
- 字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
- JAVA高级应用之装饰者模式 LineNumberReader 打印流
- Java学习日志(19-2-IO流-装饰设计模式与LineNumberReader)
- IO流-2.【字符流缓冲区BufferedWriter/BufferedReader】【readLine()方法】【装饰设计模式】【LineNumberReader】
- Java学习总结(8)—内存流,打印流,对象流,RandomAccessFile,装饰者设计模式
- Java学习总结(8)—内存流,打印流,对象流,RandomAccessFile,装饰者设计模式
- java io系列23之 BufferedReader(字符缓冲输入流)
- java io系列23之 BufferedReader(字符缓冲输入流)
- 黑马程序员_<<字符流的缓冲技术和装饰类(BufferedWriter,BufferedReader,LineNumberReader)>>
- java.io.BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
- Java-IO之BufferedReader(字符缓冲输入流)
- IO流二:IO流之缓冲区BufferedReader、BufferedWriter、装饰设计模式、LineNumberReader
- Java-IO之BufferedReader(字符缓冲输入流)