澳门威利斯人_威利斯人娱乐「手机版」

来自 办公软件 2019-10-30 14:48 的文章
当前位置: 澳门威利斯人 > 办公软件 > 正文

毕向东_Java基础视频教程第19天_IO流,装饰设计模

毕向东_Java基础录像教程第19天_IO流(06~10),_java_io

 1 class  MyBufferedReader
 2 {
 3     private FileReader fr;
 4     public MyBufferedReader(FileReader fr)
 5     {
 6         this.fr=fr;
 7     }
 8     public String myReadLine()throws IOException//声明异常,谁调用,谁解决
 9     {
10         //定义一个字符缓冲区
11         StringBuilder sb=new StringBuilder();
12         int ch=0;
13         while((ch=fr.read())!=-1)
14         {
15             if(ch=='r')
16                 continue;
17             if(ch=='n')
18                 return sb.toString();
19             else
20                 sb.append((char)ch);
21 
22         }
23         //防止因为文件末尾缺少'n'而漏读
24         if(sb.length()!=0)
25             return sb.toString();
26         return null;
27 
28     }
29 
30    //关闭输出流的缓冲区对象,实际执行的操作就是关闭输出流
31     public void myBufClose()throws IOException//声明异常,谁调用,谁解决
32     {
33         fr.close();
34     }
35 }
36 
37 /*
38 测试MyBufferedReader的功能,用其读取当前目录下的buffered.txt文件,
39 并打印在控制台上。
40 */
41 public class  MyBufferedReaderTest
42 {
43     public static void main(String[] args) 
44     {
45         //为了使MyBufferedReader对象在整个main方法中可用,在try块外定义此对象
46         MyBufferedReader mbr=null;
47         try
48         {
49             mbr=new MyBufferedReader(new FileReader("buffered.txt"));
50             String line=null;
51             while((line=mbr.myReadLine())!=null)
52             {
53                 System.out.println(line);
54             }
55             
56         }
57         catch (IOException e)
58         {
59             throw new RuntimeException("发生读取错误");
60         }
61         //在finally块中关闭流
62         finally
63         {
64             try
65             {
66                 if(mbr!=null)
67                 mbr.myBufClose();
68                 
69             }
70             catch (IOException e)
71           {
72             throw new RuntimeException("发生关闭错误");
73           }
74         }
75     }
76 }

第19天-10-IO流(MyLineNumberReader)

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class MyLineNumberReader extends MyBufferedReader {

    private int lineNumber;

    public MyLineNumberReader(Reader r) {
        super(r);
    }

    public void setLineNumber(int lineNumber) {
        this.lineNumber = lineNumber;
    }

    public int getLineNumber() {
        return lineNumber;
    }

    public String myReadLine() throws IOException {
        lineNumber  ;
        return super.myReadLine();
    }
}

class MyLineNumberReaderDemo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("buf.txt");
        MyLineNumberReader mylnr = new MyLineNumberReader(fr);

        mylnr.setLineNumber(200);
        String line;
        while ((line = mylnr.myReadLine()) != null) {
            System.out.println(mylnr.getLineNumber()   "::"   line);
        }

        mylnr.myClose();
    }
}

 

第19天-06-IO流(装饰设计情势) 装饰设计情势: 当想要对已部分对象实行功效巩固时,...

装点设计格局与持续
装点情势比持续要灵活,防止了承继连串的重叠,
还要滑坡了类与类之间的涉及。

 第19天-08-IO流(自定义装饰类)

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

class MyBufferedReader extends Reader {

    private Reader r;
    MyBufferedReader(Reader r) {
        this.r = r;
    }

    //可以一次读一行数据的方法。
    public String myReadLine() throws IOException {
        //定义一个临时容器。原BufferReader封装的是字符数组。为了演示方便。定义一个StringBuilder容器。因为最终还是要将数据变成字符串。
        StringBuilder sb = new StringBuilder();
        int ch;
        while ((ch = r.read()) != -1) {
            if (ch == 'r') continue;

            if (ch == 'n') {
                return sb.toString();
            } else {
                sb.append((char) ch);
            }
        }
        if (sb.length() != 0) return sb.toString();
        return null;
    }

    /*
    覆盖Reader类中的抽象方法。read(char[] cbuf, int off, int len)和close()是Reader的抽象方法,必须实现。
    */
    public int read(char[] cbuf, int off, int len) throws IOException {
        return r.read(cbuf, off, len);
    }

    public void close() throws IOException {
        r.close();
    }

    public void myClose() throws IOException {
        r.close();
    }
}

class MyBufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("buf.txt");
        MyBufferedReader myBuf = new MyBufferedReader(fr);

        String line;
        while ((line = myBuf.myReadLine()) != null) {
            System.out.println(line);
        }

        myBuf.myClose();
    }
}

 

第19天-09-IO流(LineNumberReader)

import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

public class LineNumberReaderDemo {

    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("buf.txt");
        LineNumberReader lnr = new LineNumberReader(fr);

        String line;
        lnr.setLineNumber(2); //设置当前行号。参数:lineNumber - 指定行号的 int 值
        while ((line = lnr.readLine()) != null) {
            System.out.println(lnr.getLineNumber()   ":"   line);
        }
        lnr.close();
    }
}

3:abcde1             #行号从setLineNumber的下一位3开始标记
4:abcde2
5:abcde3
6:abcde4

装潢设计形式使用情况
当想要对已有些对象实行功效巩固时,能够定义类,
将本来就有指标传入,基于原来就有作用,并提供抓好成效,
那么自定义的此类称为装饰类。
装饰类平日会因此构造方法选取被点缀的对象,
并依附棉被服装饰对象的作用,提供越来越强的功能。
装饰类因为拉长原来就有对象,具备的功能和已过多相像档期的顺序的,
只可是要更加强。所以装饰类和棉被服装饰类经常是属于同贰个系统之中的。

本文由澳门威利斯人发布于办公软件,转载请注明出处:毕向东_Java基础视频教程第19天_IO流,装饰设计模

关键词: 澳门威利斯人 Java IO流 装饰设计模式 异常处