- package fuxi2;
- import java.io.FileReader;
- import java.io.IOException;
- /**
- * 需求:自定义个MyLineNumberReader装饰类,实现LineNumberReader功能。
- *
- *@author XiaLei
- */
- public class Day19Test2 {
- public static void main(String[] args) {
- MyLineNumberReader lnr = null;
- try{
- lnr = new MyLineNumberReader(new FileReader("d:\\StringTest.txt"));
- String line = null;
- lnr.mySetLineNumber(100);
- while((line=lnr.myReadLine())!=null){
- System.out.println(lnr.myGetLineNumber()+":"+line);
- }
- }
- catch(IOException e){
- throw new RuntimeException("读取失败");
- }
- finally{
- try{
- if(lnr!=null){
- lnr.myClose();
- }
- }
- catch(IOException e){
- throw new RuntimeException("关流失败");
- }
- }
- }
- }
- class MyLineNumberReader{//这个类跟前面自定义MyBufferedReader装饰类,有很多相似功能,可以继承MyBufferedReader类,简化书写。
- private FileReader fr;
- private int count;
- private int x;
- MyLineNumberReader(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 int mySetLineNumber(int x){
- return this.x=x;
- }
- public int myGetLineNumber(){
- if(count==0)
- count = x;
- return 1+count++;
- }
- public void myClose() throws IOException{//建立自己的关流动作。
- fr.close();
- }
- }
复制代码 |
|