黑马程序员技术交流社区
标题:
行号缓冲输入流查错
[打印本页]
作者:
记得上线
时间:
2012-7-20 12:02
标题:
行号缓冲输入流查错
本帖最后由 记得上线 于 2012-7-20 13:48 编辑
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();
int ch=null;
int line=0;
while((ch=f.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
{
return line+sb.toString();//返回字符串的时候
同时返回计数line。
line++;//没返一次line的同时也自增一次。
}
sb.append((char)ch);
}
if(sb.length()!=0)
return line+sb.String;
return null;
}
public void myClose()throws IOException
{
f.close();
}
}
class MyLineDemo
{
public static void main(String[] args)throws IOException
{
FileReader f=new FileReader("buf.txt");
MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
while((String my=mline.MyLine())!=null)//
报错的地方
{
System.out.println(my);
}
mline.myClose();
}
}
作者:
rslheima
时间:
2012-7-20 12:53
本帖最后由 rslheima 于 2012-7-20 12:55 编辑
给你改了好多喔。。。看来你需要仔细点了!!
import java.io.*;
/*需求 :制作一个能够返回文件行数的缓冲输入流
1 先编写一缓冲输入流。
2 缓冲输入流内部的字符串容器返回字符串的同时也返回行数。
*/
class MyLineNumberReaderDemo
{
private FileReader f;
int line=0;//行号开始为1,多好
MyLineNumberReaderDemo(FileReader f)
{
this.f=f;
}
public String MyLine()throws IOException
{
StringBuilder sb=new StringBuilder();//--------
这拼写错误
int ch=0;//------
整数初值不能为null
while((ch=f.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
{ line++;//
写在return前边。
。
return line+": "+sb.toString();//返回字符串的时候同时返回计数line。
}else/
/这用else
sb.append((char)ch);
}
if(sb.length()!=0)
return line+sb.toString();/
/拼写错啦!!
return null;
}
public void myClose()throws IOException
{
f.close();
}
}
class MyLineDemo
{
public static void main(String[] args)throws IOException
{
FileReader f=new FileReader("src\\MyLineDemo.java");
MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
String my=null;//把my提出来定义
while(( my =mline.MyLine())!=null)//报错的地方
{
System.out.println(my);
}
mline.myClose();
}
}
作者:
李伟
时间:
2012-7-20 13:14
import java.io.*;
/*需求 :制作一个能够返回文件行数的缓冲输入流
1 先编写一缓冲输入流。
2 缓冲输入流内部的字符串容器返回字符串的同时也返回行数。
*/
class MyLineNumberReaderDemo
{
private FileReader f;
MyLineNumberReaderDemo(FileReader f)
{
this.f=f;
}
public String MyLine()throws IOException
{
StringBuilder sb=new StringBuilder();
int ch=-1;
int line=0;
while((ch=f.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
{
line++;
//
应该写在这个位置
return line+sb.toString();//返回字符串的时候
//同时返回计数line。
//line++;//没返一次line的同时也自增一次。
}
sb.append((char)ch);
}
if(sb.length()!=0)
return line+sb.toString();
return null;
}
public void myClose()throws IOException
{
f.close();
}
}
class MyLineDemo
{
public static void main(String[] args)throws IOException
{
FileReader f=new FileReader("buf.txt");
MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
String my=null;
while((my=mline.MyLine())!=null)//报错的地方
{
System.out.println(my);
}
mline.myClose();
}
}
作者:
王飞
时间:
2012-7-20 13:38
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();
}
}
作者:
胡文杰
时间:
2012-7-20 13:41
import java.io.*;
class MainClass
{
public static void main(String[] args) throws IOException
{
reader(new FileReader("DuoTaiDemo2.java"));
}
public static void reader(FileReader f) throws IOException
{
BufferedReader buf = new BufferedReader(f);
String line = null;
int lineNum = 1;
while((line=buf.readLine())!=null){
System.out.println((lineNum++)+line);
}
buf.close();
}
}
制作一个能够返回文件行数的缓冲输入流
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2