本帖最后由 曾勇 于 2014-11-17 22:05 编辑
/*
需求:知道了BufferedReader中的readLine方法的原理有,
自定义一个类包含和readLine功能一直的方法。
*/
import java.io.*;
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r=r;
}
//一次读一行数据的方法
public String MyReaderLine()throws IOException
{
//定义一个临时数组容器,原BufferReader封装的是字符数组
//为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串
StringBuilder sb =new StringBuilder();
int ch = 0;
while((ch=r.read())!=-1)
{
if(((char)ch)=='\r')
continue;
if(((char)ch)=='\n')
return sb.toString();
else
sb.append((char)ch);
}
/*为什么下面这句不可以换为, if(sb!=null),如果换的话,结果就变为一个死循环,
还有如果下面这句不等于空的话,最后一句话还读的到吗?
读不到的话那么在主函数中,while循环的判断语句不就一直为真,也进入了一个死循环嘛?
但是不换的话,怎么没有问题啊?
*/
if(sb.length()!=0)
return sb.toString();
return null;
}
public void MyColse()throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String args[])
{
MyBufferedReader fr = null;
try
{
fr = new MyBufferedReader(new FileReader("Demo.txt"));
String s=null;
while((s=fr.MyReaderLine())!=null)
{
System.out.println(s);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if(fr!=null)
try
{
fr.MyColse();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
|
|