黑马程序员技术交流社区
标题:
MyBufferedReader
[打印本页]
作者:
李娟
时间:
2011-12-22 09:18
标题:
MyBufferedReader
本帖最后由 李娟 于 2011-12-22 18:50 编辑
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r = r;
}
public String myReadLine() throws IOException
{
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) //如果没有这两行,运行结果也是4个数据
return sb.toString();
return null;
}
作者:
陈帅雷
时间:
2011-12-22 09:49
"if(sb.length()!=0) //如果没有这两行,运行结果也是4个数据"这句话的意思你判断字符串sb的长度是否为0,即你从文件中是否读入了字符,如果sb的长度大于0,这句话有没有运行效果都一样,例如你说的读入了4个数据的时候,sb.length() 的值是4,而4 !=0 所以就返回了sb,如果不用这句话两个return null;就不要了。
作者:
杨强
时间:
2011-12-22 09:54
if(sb.length()!=0) //如果没有这两行,运行结果也是4个数据
return sb.toString();
如果你的文件中写的是abcd但是没打回车 少了这两行是什么都输出不出来的
主要针对最后没有换行的数据
作者:
刘基军
时间:
2011-12-22 10:04
这样改写,不正确。
当a.txt文件中,若文件末尾不包含"回车换行",改写的程序读取该文件时,文件的最后一行是无法读取到的。
import java.io.*;
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r = r;
}
public String myReadLine() throws IOException
{
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);
}
/**
当你上边使用“return sb.toString();”,并将下面两行代码注销后,
对于a.txt文件中,若文件末尾不包含"回车换行",这个程序读取该文件时,文件的最后一行是无法读取到的。
*/
//if(sb.length()!=0)
// return sb.toString();
return null;
}
public static void main(String [] args) throws IOException
{
MyBufferedReader my = new MyBufferedReader(new FileReader("d:\\a.txt"));
String line=null;
while((line=my.myReadLine())!=null)
{
System.out.println(line);
}
}
}
复制代码
测试文件a.txt原内容:
11111
222222
3333333(注意:最后没有回车换行)
测试结果:
11111
222222
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2