【问题标题】:How to Read from first line in buffer reader如何从缓冲区阅读器的第一行读取
【发布时间】:2019-07-08 06:41:33
【问题描述】:

我是 java 新手,所以现在我在程序中使用缓冲区读取器,一旦我结束循环,循环将再次中断,但在第二个循环中,我再次调用了相同的缓冲区读取器,我想从第一行读取所以帮助我。 现在它读取为 Null,因为它已到达行尾

while ((s2 = br.readLine())!=null) {
    if (s2.contains(keyword2)) {
        s2 = s2.replaceAll(keyword2, " ");
        Alternate_Account_Number = s2;                    
        System.out.println(Alternate_Account_Number);
        break;
     }

}

String s3;  

String Meter_Number = null;

String keyword3 = arra.get(8);

while ((s3 = br.readLine()) != null) {
    if (s3.contains(keyword3)) {
         s3 = s3.replaceAll("\\D+", " ");
         Meter_Number = s3;
         System.out.println(Meter_Number);
         break;
     }

}

【问题讨论】:

  • 如果源很小,您可以在开始时创建一个标记,并在第一次读取所有行后调用br.reset(不在您所说的while循环内)。否则,您还不如在第一个循环后重新打开阅读器
  • 当你进入第二个循环时,输入已经用尽,所以它永远不会excpectingsxcdptions,除非你以前硬执行过mark(),这里没有说明,它需要标记position 永远不会超过当前位置后面的缓冲区大小,如 Javadoc 中所述,

标签: java


【解决方案1】:

//在缓冲区的开头设置标记

bufferedReader.mark(0);

// 在这里读取缓冲区...

// 重置到最后一个标记;在这种情况下,它是缓冲区的开始

bufferedReader.reset();

Reset buffer with BufferedReader in Java?

【讨论】:

  • 使用我的代码我没有得到我已经尝试过,就像你只是仍然缓冲区阅读器无法识别@Daniel
  • 在第一个循环中看到我正在尝试使用缓冲区阅读器读取文本文件,现在在第二个循环中我想再次从起点读取缓冲区阅读器在第二个循环中我清除了你的疑问我想现在请帮助@Daniel
【解决方案2】:

你可以使用 标记(int readAheadLimit) 标记流中的当前位置。

你可以使用 关闭() 关闭流并释放与其关联的任何系统资源。再读一遍。(按要求做)

重置() 重置流。如果流已被标记,则尝试将其重新定位在标记处。如果流尚未被标记,则尝试以适合特定流的某种方式将其重置,例如将其重新定位到其起点。不是所有的字符输入流都支持reset()操作,有些支持reset()但不支持mark()。

Read More

【讨论】:

猜你喜欢
  • 2021-06-30
  • 2016-06-17
  • 2013-04-17
  • 2018-06-14
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2015-11-19
  • 2016-06-17
相关资源
最近更新 更多