[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文件,文件中可以加一空行,再测试。
又多说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]