Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对txt文件使用bufferedreader两次?_Java_File_Bufferedreader - Fatal编程技术网

Java 对txt文件使用bufferedreader两次?

Java 对txt文件使用bufferedreader两次?,java,file,bufferedreader,Java,File,Bufferedreader,我必须计算一个文件上的行数,但在代码的后面,我还必须打印该文件中的内容,但我不能使用两次读卡器,它只显示null。我如何在不创建一堆bufferedreader对象的情况下解决这个问题? 谢谢 同时打印和计数 将行移动到数组中,然后打印它们 请确保在重新打开之前已关闭该文件 请尝试关闭缓冲区,然后重新打开它 BufferedReader bufferedReader = new BufferedReader(new FileReader("src/main/java/com/willia

我必须计算一个文件上的行数,但在代码的后面,我还必须打印该文件中的内容,但我不能使用两次读卡器,它只显示null。我如何在不创建一堆bufferedreader对象的情况下解决这个问题? 谢谢

  • 同时打印和计数
  • 将行移动到数组中,然后打印它们
  • 请确保在重新打开之前已关闭该文件
    请尝试关闭缓冲区,然后重新打开它

        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();
        }
    }
    

    您可以使用
    BufferedReader
    mark()
    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
    支持标记,但并非所有
    读取器都支持标记。您可以使用
    markSupported()
    进行检查。

    只需关闭流并创建一个新对象,可能会复制并计算您打印的行数即可。当您说“稍后在代码中”时,您是指使用相同的方法吗?您可以始终使用一个行数计数器并打印行数。