2009-12-28 23 views
1

这一次,我有一个很蹩脚的问题,这是完美的工作,但现在它不是从输入文件中读取:在命令行

 BufferedReader br = new BufferedReader(new InputStreamReader(
       System.in)); 

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

输入文件:

1 
2 
3 
4 
5 
6 
7 
8 
9 

在命令行:$的java myprogram < inputfile中

以上书面代码的结果是:

2 
    4 
    6 
    8 
null 

但预期的输出应该与输入文件相同!

我哪里错了?

回答

4

您正在调用br.readLine()两次。它在一段时间内调用它一次,并实际打印一次。这就是为什么你只打印每隔一行。

编辑:你的条件应该是:

while(br.ready()){ 
    System.out.println(br.readLine()); 
} 
+0

根据底层流和读者的,这可能过早地退出。 'ready()'方法只测试读写器是否保证不被阻塞,而不是是否有更多的输入。 – erickson 2009-12-28 16:10:28

+0

现在,这是一个纯粹的Java新手问题! :P 谢谢! – zengr 2009-12-28 16:11:33

7

在每个循环,您应该不叫readLine()两次。

每次调用它时,它都会读取一个新行。打印每个调用的结果:

while (true) { 
    String line = br.readLine(); 
    if (line == null) 
    break; 
    System.out.println(line); 
} 
2

您可以修改您的代码,如:

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

0

code from this blog

FileReader f = new FileReader(file); 
BufferedReader bufferReader = new BufferedReader(f); 
String line; 
// Read file line by line and print on the console 
while ((line = bufferReader.readLine()) != null) { 
     System.out.println(line); 
}