【问题标题】:Reading every 10 lines using a BufferedReader使用 BufferedReader 每 10 行读取一次
【发布时间】:2013-03-15 23:33:50
【问题描述】:

有没有办法使用BufferedReader.txt 文件中每10 行读取一次?目前我的BufferedReader 正在读取每一行,拆分不同的值并将它们存储在一个数组列表中;然后在我的程序的其他地方使用。

【问题讨论】:

  • 你的线条是固定大小的吗?
  • 是的,它们是固定大小的

标签: java bufferedreader


【解决方案1】:

使用专门用于此目的的LineNumberReader

LineNumberReader reader = new LineNumberReader(fileReader);
ArrayList<String> goodLines = new ArrayList<String>();
String line = null;
while ((line = reader.readLine()) != null) {
   if ((reader.getLineNumber()+1) % 10 == 0) {
       goodLines.add(line);
   }
}

【讨论】:

  • OP 专门用BufferedReader 询问答案。
  • 如果您查看LineNumberReader javadocs,您会发现它继承自BufferedReader、@syb0rg
  • OP 应该发布他的感受,而不是你。
  • 这叫解题。我引用,“使用缓冲阅读器?”。
  • 根据我的解释(和标准 OO 用语),LineNumberReader 是一个 BufferedReader,因为它位于前者的继承层次结构中。如果您想进一步讨论,请邀请我与您聊天。
【解决方案2】:

使用循环读取所有你不想要的行,然后读取你想要的行。

BufferedReader br = new BufferedReader(new FileReader(file));
int index = 10;
while (lineNumber < index - 1)
    {
        lineNumber++;
        br.readLine();
    }
String lineYouWant = br.readLine();
if (lineYouWant.isEmpty()) br.close();
// Do stuff with lineYouWant
br.close();

【讨论】:

    【解决方案3】:

    由于所有行的大小都相同,您可以查看 BufferedReader 中的 skip() 方法。您基本上会阅读一行,然后跳过 10 * lineSize 并阅读下一行,等等...

    【讨论】:

      【解决方案4】:

      缓冲读取器的目的是使读取逻辑单元(如行)变得容易。读取多行代码会使您的代码复杂化,并且不会提供很大的性能提升,因为缓冲读取器已经将大块数据读取到其缓冲区中。

      编辑:由于您的记录是固定大小的,您可以使用较低级别的阅读器并只读取所需的字节数。

      【讨论】:

      • OP 没有就BufferedReaders 征求意见,所以这不能回答问题。
      • @sy 奇怪,你的帖子说的基本相同,“迭代地做”
      • 我的回答与你的回答毫无共同之处。
      猜你喜欢
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2013-10-30
      • 2015-05-12
      • 2019-01-09
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多