Java当中的IO(三)
1. 处理流的使用实例
2. 装饰者(Decorator)模式
3. 节点流与处理流的关系
1. 处理流的使用实例
BufferedReader处理流介绍
public String readline() throws IO Exception
对于下面这样的文件, 每一行都是关于一个人的信息, 这种情况每次读一行是非常方便的
张三 F 20
李四 M 21
王五 F 22
赵六 M 23
BufferedReader使用方法
生成BufferedReader对象的方法
BufferedReader in = new BufferedReader(newFileReader("foo.in"));
BufferedReader处理流使用之前必须要有一个节点流
new BufferedReader(newFileReader("foo.in"));实际是将节点流传递给处理流
1 import java.io.*; 2 3 class Test{ 4 public static void main(String args []){ 5 FileReader fileReader = null ; 6 BufferedReader bufferedReader = null ; 7 try{ 8 fileReader = new FileReader("e:/Java/src/IO3/from.txt"); 9 bufferedReader = new BufferedReader(fileReader); 10 String line = bufferedReader.readLine(); 11 System.out.println(line); 12 } 13 catch(Exception e){ 14 System.out.println(e); 15 } 16 finally{ 17 try{ 18 bufferedReader.close(); 19 fileReader.close(); 20 } 21 catch(Exception e){ 22 System.out.println(e); 23 } 24 } 25 } 26 }
1 import java.io.*; 2 3 class Test{ 4 public static void main(String args []){ 5 FileReader fileReader = null ; 6 BufferedReader bufferedReader = null ; 7 try{ 8 fileReader = new FileReader("e:/Java/src/IO3/from.txt"); 9 bufferedReader = new BufferedReader(fileReader); 10 String line = null; 11 while(true){ 12 line = bufferedReader.readLine(); 13 if (line == null) break; 14 System.out.println(line); 15 } 16 } 17 catch(Exception e){ 18 System.out.println(e); 19 } 20 finally{ 21 try{ 22 bufferedReader.close(); 23 fileReader.close(); 24 } 25 catch(Exception e){ 26 System.out.println(e); 27 } 28 } 29 } 30 }
2. 装饰者模式
简化集成体系, 使用装饰者模式
A公司规定工人进门要说“你好”
B公司规定工人进门要穿鞋套
以前定义一个工人的接口, 在分别建4个类, A水管工, A木匠, B水管工, B木匠...这样多几个公司就会越来越庞大
1 interface Worker{ 2 public void doSomeWork(); 3 }
1 class Carpenter implements Worker{ 2 public void doSomeWork(){ 3 System.out.println("修理门窗"); 4 } 5 }
1 class Plumber implements Worker{ 2 public void doSomeWork(){ 3 System.out.println("修理水管"); 4 } 5 }
1 class AWorker implements Worker{ 2 private Worker worker ; //Workwe类型的成员变量 3 public AWorker(Worker worker){ 4 this.worker = worker ; 5 } 6 public void doSomeWork(){ 7 System.out.println("你好"); 8 worker.doSomeWork(); 9 } 10 }
1 class Test01{ 2 public static void main(String args []){ 3 //生成一个A公司水管工对象 4 Plumber plumber = new Plumber(); 5 AWorker aWorker = new AWorker(plumber); 6 aWorker.doSomeWork(); 7 } 8 }
这样做的好处在哪呢 , 假如我们要A木匠工作
1 class Test01{ 2 public static void main(String args []){ 3 //生成一个A公司水管工对象 4 Plumber plumber = new Plumber(); 5 AWorker aWorker = new AWorker(plumber); 6 aWorker.doSomeWork(); 7 8 Carpenter carpenter = new Carpenter(); 9 AWork awork2 = new AWorker(carpenter); 10 aWorker2.doSomeWork(); 11 } 12 }
避免了继承结构, 这样就简化了模式
AWorker叫做装饰者
Carpenter, Plumber叫做 被装饰者
装饰者 可以给被 装饰者 加些功能.
将 被装饰者 参数传递 给 装饰者