关于java IO流中lineNumberReader类的getLineNumber()方法

random7 2014-06-09 11:54:50
有如下代码:
import java.io.*;
import java.util.*;
public class Exercise1 {
public static void main(String[] args)
{
try
{
BufferedReader in=new BufferedReader(new FileReader("data1.txt"));
String s=new String();
String s1=new String();
Vector test=new Vector();
int size=0;
while((s=in.readLine())!=null)
test.addElement(s);
//-----------------------
/*size=test.size();
for(int i=size-1;i>=0;i--)
System.out.println(test.elementAt(i));*/
//------------------------------------------------------
size=test.size();
for(int i=0;i<size;i++)
s1=s1+(String)test.elementAt(i)+"\n";
LineNumberReader li=new LineNumberReader(new StringReader(s1));
BufferedReader in1=new BufferedReader(li);
//PrintWriter out1=new PrintWriter(new BufferedWriter(new FileWriter("data3.txt")));
while((s=in1.readLine())!=null)
System.out.println("Line"+li.getLineNumber()+": "+s);
in1.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}

data1.txt文件中有有5行,最终输出无法得到正确的行号,输出如下:
Line5: today is Monday
Line5: tomorrow is TuesDay
Line5: the day after tomorrow is wednesday
Line5: i love hdusadjsa
Line5: this is hahha!!!
但是我用li.getLineNumber()时就可以正确得到行号,此时完全不用in1。这个是我方法是我仿照Thinking in java中的例子写的。不知道哪里错了??给位能否指正。Thx
...全文
469 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2014-06-11
  • 打赏
  • 举报
回复
引用 5 楼 envy111 的回复:
[quote=引用 4 楼 magi1201 的回复:] [quote=引用 3 楼 envy111 的回复:] 但我这是按照Thinking in java这本书上的例子来写的,不可能有这么明显的错误吧?
没看过thinking in java ,不过跟前有一本,楼主仿的哪个章节的例子呢,我看看去,我这里的是第四版的。[/quote] Thinking in java 中文第四版 10.7.4 小节 NewIODemo.java这个例子 你看下?是不是我的理解有问题。[/quote] 没看过第四版,TIJ是十几年前看的了,当时就觉得翻译+原著都有点问题
小绵羊 2014-06-11
  • 打赏
  • 举报
回复
	String text = "a\r\nb\r\nc\r\n";

			LineNumberReader r = new LineNumberReader(new BufferedReader(new StringReader(text)));

			String tmp = null;
			while ((tmp = r.readLine()) != null)
				System.out.println("Line" + r.getLineNumber() + ": " + tmp);
			r.close();
lz应该用LineNumberReader 来包装BufferedReader而不是反过来。 BufferedReader 的缓冲区默认是8192 lz的文本内容应该还没这么多,用BufferedReader包装LineNumberReader 的话直接就给缓冲完了,所以行号一直是5。
姜小白- 2014-06-11
  • 打赏
  • 举报
回复
引用 5 楼 envy111 的回复:
Thinking in java 中文第四版 10.7.4 小节 NewIODemo.java这个例子 你看下?是不是我的理解有问题。
我看的thinking in java 第十章只到10.7.2 是嵌套类的从多层嵌套类访问外部类的成员 木有10.7.4节。6楼大牛已经确认我们的理解是对的,这个就可以先过了,哈哈。
random7 2014-06-11
  • 打赏
  • 举报
回复
引用 6 楼 shine333 的回复:
[quote=引用 5 楼 envy111 的回复:] 但我这是按照Thinking in java这本书上的例子来写的,不可能有这么明显的错误吧?
看了开头我还想问,用了那本书上的例子,太老了,完全可以扔掉了。还在用Vector 而且,现在显然楼上几位告诉你的是正确答案。getLineNumber,代表的是这个对象,当前读到第几行。你在全部读完,放入Vector之后,再去调用getLineNumber,显然他只会告诉你最后一行的行号。 一开始是0,每次调用read类方法的时候,碰到'\n',就会+1。[/quote] 好吧,我是觉得经典书籍不应该犯这样的错误啊!
shine333 2014-06-11
  • 打赏
  • 举报
回复
引用 5 楼 envy111 的回复:
但我这是按照Thinking in java这本书上的例子来写的,不可能有这么明显的错误吧?
看了开头我还想问,用了那本书上的例子,太老了,完全可以扔掉了。还在用Vector 而且,现在显然楼上几位告诉你的是正确答案。getLineNumber,代表的是这个对象,当前读到第几行。你在全部读完,放入Vector之后,再去调用getLineNumber,显然他只会告诉你最后一行的行号。 一开始是0,每次调用read类方法的时候,碰到'\n',就会+1。
姜小白- 2014-06-10
  • 打赏
  • 举报
回复
是跟in1.readLine 有关系
while((s=in1.readLine())!=null) {
                System.out.println("Line "+li.getLineNumber()+": "+s);
            }
in1.readLine() 时,in1需要按照一行一行来输出自己的内容,但输出之前in1必须将li的内容全部读完,所以li的lineNumber就到了第5行了。
random7 2014-06-10
  • 打赏
  • 举报
回复
引用 4 楼 magi1201 的回复:
[quote=引用 3 楼 envy111 的回复:] 但我这是按照Thinking in java这本书上的例子来写的,不可能有这么明显的错误吧?
没看过thinking in java ,不过跟前有一本,楼主仿的哪个章节的例子呢,我看看去,我这里的是第四版的。[/quote] Thinking in java 中文第四版 10.7.4 小节 NewIODemo.java这个例子 你看下?是不是我的理解有问题。
lishikai500 2014-06-10
  • 打赏
  • 举报
回复
li.getLineNumber()是得到总共有几行吧,那你就用 一个counter, counter++来打印吧
姜小白- 2014-06-10
  • 打赏
  • 举报
回复
引用 3 楼 envy111 的回复:
但我这是按照Thinking in java这本书上的例子来写的,不可能有这么明显的错误吧?
没看过thinking in java ,不过跟前有一本,楼主仿的哪个章节的例子呢,我看看去,我这里的是第四版的。
random7 2014-06-10
  • 打赏
  • 举报
回复
引用 2 楼 magi1201 的回复:
是跟in1.readLine 有关系
while((s=in1.readLine())!=null) {
                System.out.println("Line "+li.getLineNumber()+": "+s);
            }
in1.readLine() 时,in1需要按照一行一行来输出自己的内容,但输出之前in1必须将li的内容全部读完,所以li的lineNumber就到了第5行了。
但我这是按照Thinking in java这本书上的例子来写的,不可能有这么明显的错误吧?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧