建议看下毕老师 readLine()方法原理,BufferedReader类中的readline()方法之所以会换行,是因为底层调用的还是Reader来的read()方法,
然后read方法如果读取到\r会继续continue,如果读取到\t则会返回数组,最后一行之所以不会换行是因为最后一行没有Enter ,也就是没有读取到\r\t
附上自己定义的BufferedReadr类的readline()方法代码:
import java.io.*;
class myBufferdeReader extends Reader //子类继承Reader要实现其抽象方法
{
private Reader r;
myBufferdeReader(Reader r)
{
this.r=r;
}
//可以一次读取一行数据的方法
public String myReadline() throws IOException
{
//定义一个临时容器,原BuffferdeReader封装的是字符数组
//最终还是要将数据变成字符串返回
StringBuilder sb=new StringBuilder();
int ch=0;
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;
}
public void myClose()throws IOException
{
r.close();
}
public void close()
{
r.close();
}
public int read(char[] cbuf,int off,int len)
{
return r.read(cbuf,off,len);
}
}
class myBufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
Reader fr=new FileReader("Person.java");
myBufferdeReader mybuf=new myBufferdeReader(fr);
String len=null;
while((len=mybuf.myReadline())!=null)
{
System.out.println(len);
}
mybuf.myClose();
}
}
|