黑马程序员技术交流社区

标题: 关于try close的问题 [打印本页]

作者: 进击的蜗牛    时间: 2015-7-19 23:11
标题: 关于try close的问题
一共三个问题: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)
                {
                       
                }
        }       
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2