【问题标题】:Question about Java File Reader关于Java文件阅读器的问题
【发布时间】:2010-03-19 19:36:08
【问题描述】:

我在使用 FileReader 类时遇到了一些问题。

如何在它经过的行中指定偏移量,以及如何告诉它何时停止? 假设我希望它遍历 .txt 文件中的每一行,但只有第 100-200 行然后停止?

我该怎么做?现在我正在使用 ReadLine() 但我认为没有办法指定偏移量。

非常感谢任何快速帮助。谢谢。

【问题讨论】:

  • java.io.FileReader 没有 readLine() 方法。 java.io.BufferedReader 可以。我假设您的意思是 BufferedReader?

标签: java line readline filereader


【解决方案1】:
  1. 你不能。 FileReader 一次读取一个字符或一次读取一行。显然,您可以编写自己的代码扩展或包装它以跳到不需要的行。

  2. 旁白:小心使用 FileReader 或 FileWriter - 它们使用默认的 LOCALE 字符集。如果要强制使用字符集,请使用 OutputStreamWriter 或 InputStreamReader。示例

Writer w = new FileWriter(file) 可以替换为 Writer w = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");

  1. 另一种选择:如果您有 FIXED-WIDTH 文本,请查看 RandomAccessFile,它可以让您搜索到任何位置。除非您有固定宽度的文本或要跳到一行的索引,否则这对您没有多大帮助。但它很方便:)

【讨论】:

    【解决方案2】:

    阅读所有行,但使用另一个变量来计算您所在的行。如果您不想处理某行(例如,在第 100 行之前),请致电 continue;如果您不想再处理任何行(在第 200 行之后),请致电 break

    【讨论】:

      【解决方案3】:

      没有办法告诉读者只阅读某些行,你可以使用计数器来做到这一点。

      try { 
          BufferedReader in = new BufferedReader(new FileReader("infilename")); 
          String str; 
          int lineNumber = 0;
      
          while ((str = in.readLine()) != null) { 
              lineNumber++;
      
              if (lineNumber >= 100 && lineNumber <= 200) {
                  System.out.println("Line " + lineNumber + ": " + str);
              }
          } 
      
          in.close(); 
      } catch (IOException e) { } 
      

      【讨论】:

        【解决方案4】:
        BufferedReader in = new BufferedReader(new FileReader("foo.in"));
        for(int i=0;i<100;i++,in.readLine()){}
        String line101 = in.readLine();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-20
          • 1970-01-01
          • 2015-11-11
          • 1970-01-01
          • 2012-01-04
          相关资源
          最近更新 更多