2016-03-06 50 views
0

我必须计算文件中的行数,但后来在代码中,我还必须打印该文件中的内容,但我无法使用读取器两次,它只是表示空值。如何在不创建一堆bufferedreader对象的情况下解决这个问题? 谢谢在txt文件上使用bufferedreader两次?

+2

只是关闭流和创建一个新的对象,可能重复http://stackoverflow.com/questions/5421653/reset-buffer-with-bufferedreader-in-java和http://stackoverflow.com/questions/ 262618/java-bufferedreader-back-to-the-top-of-a-text-file – ritesht93

+0

请计算您打印的行数。 –

+0

当你在代码后面说'你的意思是用同样的方法吗? 您总是可以有一个计数器来显示行数并打印行。 –

回答

0
  1. 打印并计算在同一时间?
  2. 将行移动到数组然后打印它们?
  3. 确保您在重新打开文件之前关闭了文件?
0

尝试关闭缓冲区,然后再次重新打开它。

BufferedReader bufferedReader = new BufferedReader(new FileReader("src/main/java/com/william/sandbox/stackoverflow/samples20160306/Demo.java")); 
    String line = bufferedReader.readLine(); 
    int lineCount = 0; 
    while(line != null){ 
     lineCount += 1; 
     line = bufferedReader.readLine(); 
    } 
    System.out.println("Line count is: " + lineCount); 

    bufferedReader.close(); 
    bufferedReader = new BufferedReader(new FileReader("src/main/java/com/william/sandbox/stackoverflow/samples20160306/Demo.java")); 

    line = bufferedReader.readLine(); 
    while(line != null){ 
     System.out.println(line); 
     line = bufferedReader.readLine(); 
    } 
} 
+0

谢谢!作品!! –

-1

您可以使用BufferedReadermark()reset()方法跳回到一个特定位置。

try (BufferedReader r = new BufferedReader(new FileReader("somefile.txt"))) { 
    // marks this position for the next 10 characters read 
    // after that the mark is lost 
    r.mark(10); 

    // do some reading 

    // jump back to the mark 
    r.reset(); 
} 

需要注意的是,BufferedReader支持标记,但不是所有的Reader就做。您可以使用markSupported()进行检查。