- package fuxi2;
- import java.io.BufferedWriter;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- /**
- * 需求:建立一个MyBufferedReader类
- * 这其实就是利用了装饰设计模式而设计的装饰类。这种设计模式,主要是对已有对象经行功能增强。其比继承要灵活,避免了继承体系的臃肿,降低了类与类之间的联系。
- * 装饰类与被装饰类通常属于同一个体系。
- *@author XiaLei
- */
- public class Day19Test1 {
- public static void main(String[] args) {
- MyBufferedReader bufr = null;
- BufferedWriter bufw = null;
- try{
- bufr = new MyBufferedReader(new FileReader("D:\\JAVA\\day13\\StringTest.java"));
- bufw = new BufferedWriter(new FileWriter("D:\\StringTest.txt"));
-
- String line =null;//可以理解为缓冲区的中转站
- while((line=bufr.myReadLine())!=null){//readLine读取的是换行符之前的内容,当读到换行符时,它就会把读到的内容返回。
- bufw.write(line);
- bufw.newLine();//所以这里要加上newLine换行
- bufw.flush();//有缓冲区必须要刷新
- }
- }
- catch(IOException e){
- throw new RuntimeException("读写失败");
- }
- finally{
- try{
- if(bufr!=null)
- bufr.myClose();//缓冲区关闭,读取写入流也就关闭了,不用单独关闭
- }
- catch(IOException e){
- throw new RuntimeException("关流失败");
- }
- try{
- if(bufw!=null)
- bufw.close();
- }
- catch(IOException e){
- throw new RuntimeException("关流失败");
- }
- }
- }
- }
- class MyBufferedReader{
-
- private FileReader fr;
- MyBufferedReader(FileReader fr){
- this.fr = fr;
- }
- public String myReadLine() throws IOException{//根据readLine读取到换行符就返回之前读到的内容这一原理,设计自己的读取方式。
-
- StringBuilder sb = new StringBuilder();//建立容器,将读到的内容存入。
- int num = 0;
- while((num=fr.read())!=0){
- if(num=='\n')
- continue;
- if(num=='\r')
- return sb.toString();
- else
- sb.append((char)num);
- }
- if(sb.length()!=0)//当遇到条件判断时,一定要细心。多考虑一些情况!!!!!!!
- return sb.toString();
- return null;
- }
- public void myClose() throws IOException{//建立自己的关流动作。
- fr.close();
- }
- }
复制代码 |
|