【问题标题】:How to read previous line by using bufferedReader [closed]如何使用 bufferedReader 读取上一行 [关闭]
【发布时间】:2014-04-13 07:53:30
【问题描述】:

我正在做一个大型项目。我被困在一个地方。我正在使用以下代码从文件中读取:

String str = null;
FileReader fr = new FileReader("H:\\Eclipse\\Emulator\\progin8085.txt");
BufferedReader br = new BufferedReader(fr);
str = br.readLine(); //using it in a loop from 0 to total_no_of_lines

现在我假设在第 8 行(在向文件中输入数据时计算行号),我想回到第 3 行或第 4 行或任何一行,并再次想要读取并执行每个语句。如何仅使用 BufferedReader 读取先前的语句?如果不可能,还有其他解决方案吗?

【问题讨论】:

  • 通过 mark() 和 reset() 方法是可能的,但不受欢迎。为什么你认为你需要重新读取数据?这不寻常。
  • 不要只是重复自己。回答问题。
  • @HarisMehmood:让JVM崩溃吧?
  • @HarisMehmood 我现在很困惑。你说读入记忆。有人说如果太大了怎么办?你说那很好。现在你说显然不是如果它太大了。那么它是什么?
  • @Noname 当你提到哈里斯的声明时,很难理解你为什么要对鲍里斯讲话。一般来说,您需要更仔细地阅读此处发布的内容。

标签: java file-io bufferedreader


【解决方案1】:

一些Readers 支持标记。您可以使用它们来倒带文件。一个特别有用的Reader (imo) 是LineNumberReader,它支持标记。这种代码可能适合您的需要。

public static int final READ_AHEAD_LIMIT = 100000;

LineNumberReader lnReader = new LineNumberReader(reader);

while (youWantToRead) {
  ...
  if (mightBeInterestingLater) {
    lnReader.mark(READ_AHEAD_LIMIT);
  }
  ...
  if (nowWantToRewind) {
    lnReader.reset();
    // We're now at whatever place mark() was last called at.
  }

【讨论】:

  • BufferedReader 支持 mark()。他不必改变读者。请参阅 Javadoc。
  • 并不是说没有。我刚刚指出 LineNumberReader 很有用,它确实支持标记。
【解决方案2】:

将文本文件的所有行保存在 String[] StrArray 中,然后为所欲为。

【讨论】:

  • 假设文件适合内存。
  • 好的...但是 bUfferedReader 只能通过其他方式完成所需任务吗?
  • @Noname EJP 刚才说可以通过mark() 和reset() 方法来实现。
  • @Noname 我在评论中回答了这个问题。包含您忽略的问题的那个。
  • 这里有点违反最佳编码实践。
猜你喜欢
  • 1970-01-01
  • 2015-05-14
  • 2012-03-14
  • 2017-07-16
  • 1970-01-01
  • 2012-11-12
  • 2012-12-22
  • 2013-10-30
  • 2015-05-12
相关资源
最近更新 更多