import java.io.*;
/*需求 :制作一个能够返回文件行数的缓冲输入流
1 先编写一缓冲输入流。
2 缓冲输入流内部的字符串容器返回字符串的同时也返回行数。
*/
class MyLineNumberReaderDemo
{
private FileReader f;
MyLineNumberReaderDemo(FileReader f)
{
this.f=f;
}
public String MyLine()throws IOException
{
StringBuilder sb=new StringBulider();---c此处拼写有误,应该是StringBuilder
int ch=null; //个么,int是整数类型,只能赋值为数字。 改为:int ch= 0;或者 int ch;如果你声明 的时候没有赋值,系统默认的值是0. int line=0;
while((ch=f.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
{
return line+sb.toString();//返回字符串的时候同时返回计数line。
line++;//没返一次line的同时也自增一次。----此处出错了,因为如果此句话没有读到那么行号就不会变,读到上面的/r此次循环就已经结束了继续下一次循环,所以line不会加一,行号就会错。
应该把line放在第一个if的前面,让它作用于整个循环 }
sb.append((char)ch);
}
if(sb.length()!=0)
return line+sb.String;
return null;
}
public void myClose()throws IOException
{
f.close();
}
}
public class test1
{
public static void main(String[] args)throws IOException
{
FileReader f=new FileReader("buf.txt");
MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
String my = null;
while(( /*这里的String 要移出去,不能一边声明一边赋值*/ my=mline.MyLine())!=null)//报错的地方
{
System.out.println(my);
}
mline.myClose();
}
}
|