A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 进击的蜗牛 中级黑马   /  2015-7-19 23:11  /  391 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一共三个问题:1,//这句话没有异常,为什么写在try以外,程序就读不出来东西了!!但是没错误!
                           mylnr = new MyLineNumberReader(fr);
                         2, //这句有什么用?为什么返回的是null?
                                return null;
                         3,结果为什么有好多空行?
                                 例如251:
                                                  //中间这一行是空行,全部都有空行
                                        252:}
public class 有错误MyLineNumberReaderDemo {
        /**
         * 自定义按行号读取
         */
        public static void main(String[] args) {
                FileReader fr = null;
                MyLineNumberReader mylnr = null;
               
                try
                {
                        fr = new FileReader("PersonDemo.java");
                       
//这句话没有异常,为什么写在try以外,程序就读不出来东西了!!但是没错误!
             mylnr = new MyLineNumberReader(fr);
                       
                       
                        String line = null;
                        mylnr.setLineNumber(200);//设置起始行号
                       
                        while((line=mylnr.myReadLine())!=null)
                        {
                                System.out.println(mylnr.getLineNumber()+":"+line);
                        }
                }
                catch(Exception e)
                {
                        e.printStackTrace();
                }
                finally
                {
                        try
                        {
                                if(mylnr!=null)
                                {
                                        mylnr.myClose();
                                }
                        }
                        catch(Exception e)
                        {
                                e.printStackTrace();
                        }
                }
        }

}


//自定义按行号读取
class MyLineNumberReader
{
        private Reader r;
        private int lineNumber;
        MyLineNumberReader(Reader r)
        {
                this.r = r;
        }
       
        public String myReadLine()
        {
                lineNumber++;
               
                //定义一个临时容器。原BufferedReader封装的是字符数组。
                //为了演示方便。定义一个StringBuilder容器。因为最终还是要将数据变成字符串。
                StringBuilder sb = new StringBuilder();
               
                int ch = 0;
               
                try
                {
                        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();
                        }
                }
                catch(Exception e)
                {
                       
                }
               //这句有什么用?为什么返回的是null?
        return null;
        }
       
        public void setLineNumber(int lineNumber)
        {
                this.lineNumber = lineNumber;
        }
       
        public int getLineNumber()
        {
                return lineNumber;
        }
       
        public void myClose()
        {
                try
                {
                        r.close();
                }
                catch(Exception e)
                {
                       
                }
        }       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马