Java BufferedReader 在循环之前检查循环的下一行

标签 java loops bufferedreader

我正在解析一个 .cvs 文件。 对于 cvs 的每一行,我创建一个包含解析值的对象,并将它们放入一个集合中。

在将对象放入 map 并循环到下一个对象之前,我需要检查下一个 cvs 行是否与实际对象相同,但特定属性值不同。

为此,我需要检查缓冲区的下一行,但将循环的缓冲区保持在同一位置。

例如:

BufferedReader input  = new BufferedReader(new InputStreamReader(new FileInputStream(file),"ISO-8859-1"));
String line = null;

while ((line = input.readLine()) != null) {
    do something

    while ((nextline = input.readLine()) != null) { //now I have to check the next lines
       //I do something with the next lines. and then break.
    }
    do something else and continue the first loop.
}

最佳答案

  1. 您可以使用 BufferedReader.mark(int) 标记当前位置.要返回到调用 BufferedReader.reset() 的位置。 mark 的参数是“预读限制”;如果您在读取超过限制后尝试 reset(),您可能会遇到 IOException。

  2. 或者您可以使用 RandomAccessFile相反:

    // Get current position
    long pos = raf.getFilePointer();
    // read more lines...
    // Return to old position
    raf.seek(pos);
    
  3. 或者您可以使用 PushbackReader它允许您未读 字符。但缺点是:PushbackReader 不提供 readLine 方法。

关于Java BufferedReader 在循环之前检查循环的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198280/

相关文章:

java - 使用 BufferedReader 和 FileReader 从文件中读取

java - 创建可变数量的对象并在java中显示所有对象

java - 确定子类。多态性或instanceof

python - 如何以矢量化方式而不是使用循环来编写代码?

python - 在 python 中查找子字符串

python - 用列表中的值替换 Pandas 数据框中的索引值

java - 使用 Java 解析文件并替换双引号内的空格

java - BufferedReader 不读取整个在线 XML 文件

java - 所有java类文件都必须属于一个java包吗?

java - 是否可以在使用 Maven 构建的 War 文件中仅包含使用过的类?