求哪位童鞋解释下BufferedReader的readLine方法在打了断点后读取的数据不对的原因,谢谢!

[code="java"]package com.oraro.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class a {
public static void main(String[] args) throws IOException {
File f = new File("d:/1.txt");
if (f != null) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(f);
br = new BufferedReader(fr);
String line = br.readLine();
while (line != null) {// 断点打在这里,然后一步一步执行,和不打断点直接执行的区别;
System.out.println(line);
line = br.readLine();
}
} catch (Exception e) {
br.close();
fr.close();
}
br.close();
fr.close();
}
}
}
[/code]
注意JDK是1.4,当不打断点的时候就不会有问题,附件有1.txt文件,文件中可以加一空行,再测试。

6个回答

又多说2句 ,为什么不打断点就正常
因为不断点的话
他就忽略了各种进制,直到换行符才算readLine()
这是jvm的机制决定的,你断点其实就是为了更仔细的看运行过程
所以他就真的一点一点给你运行鸟 :?

能描述一下那里不对吗?

真不明白哪里不对了。。是对的。

打不打断点绝对不会影响结果
呼唤LZ把结果截图发出来

复制的代码,附件也下载了
经测试没有这种显现

[quote]看下打了断点的结果截图 [/quote]

我看了你文本的Haxe,问题是你的文本输入格式是8进制双位
不会贴截图 ,我帮你打出来

你的第一行 aa|1|1|dd|sd

实际上背后是

00000000h 61 61 ; aa // 61代表a
00000002h 7C 31 ; |1 // 7C 代表| ,31代表1 依此类推下面行
00000004h 7C 31 ; |1
00000006h 64 7C ; d|
00000008h 73 64 ; sd
0000000ah 0D 0A ; .. // 0D 0A通用换行


好了,问题出现你写的程序了,其实上次我就想说来着

第一行没有问题,是因为你一开始写
line = reader.readLine()
在循环while外面
其实这个时候jvm里只取出来了aa 但是不会打印出来,等遇到真正的换行他才打印
所以第一行正常取出来了 输出没有问题

第2行就麻烦了
你在循环里先 readLine()了一次 把aa取出来
但是当你while 的时候 line !=null
因为你定义line = reader.readLine()是循环的大前提
这个时候这句话的判断实际上是
line 先等于 readLine() 然后才判断结果是不是null

所以,判断的就是接下来的 |1 而不是本来的 aa
其他人没有出问题,是文本编辑器默认格式不一样


既然说了这么多,别嫌弃姐姐啰嗦啊
本来你5行代码解决的问题,结果你硬写了快20行
java看似很简单,谁都可以写
但真的不容易啊。。。
[quote]

public static void main (String[] arg) throws Exception{

File f = new File("c:/1.txt");

BufferedReader br =new BufferedReader(new FileReader(f));

String line=null;
while ((line=br.readLine())!= null) {
System.out.println(line);}

br.close();

}[/quote]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!