代码之家  ›  专栏  ›  技术社区  ›  Lluis Martinez

在Java中从文本文件中读取特定行

  •  21
  • Lluis Martinez  · 技术社区  · 15 年前

    是否有任何方法可以从文本文件中读取特定行?在API或Apache Commons中。 比如:

    String readLine(File file, int lineNumber)
    

    我同意它的实现很简单,但是它不是很有效,特别是当文件很大的时候。

    9 回复  |  直到 9 年前
        1
  •  17
  •   Bozho    11 年前
    String line = FileUtils.readLines(file).get(lineNumber);
    

    可以,但它仍然存在效率问题。

    或者,您可以使用:

     LineIterator it = IOUtils.lineIterator(
           new BufferedReader(new FileReader("file.txt")));
     for (int lineNumber = 0; it.hasNext(); lineNumber++) {
        String line = (String) it.next();
        if (lineNumber == expectedLineNumber) {
            return line;
        }
     }
    

    看看 Scanner.skip(..)

    效率 我是说 内存效率

        2
  •  5
  •   Andrzej Doyle    15 年前

    我不知道。

    请注意,对于行的起始位置,文件上没有特定的索引,因此任何实用方法的效率都与以下方法相同:

    BufferedReader r = new BufferedReader(new FileReader(file));
    for (int i = 0; i < lineNumber - 1; i++)
    {
       r.readLine();
    }
    return r.readLine();
    

    (当然,具有适当的错误处理和资源关闭逻辑)。

        3
  •  1
  •   pavium    15 年前

    如果你读的是 如果长度相同,那么计算可能会有用。

    但是在不同长度的行的情况下,我认为在行数正确之前,没有其他方法可以一次读取一行。

        4
  •  1
  •   David Webb    15 年前

    不幸的是,除非您能保证文件中的每一行都是完全相同的长度,否则您将不得不通读整个文件,或者至少读到您要读的那一行。

    计算行数的唯一方法是在文件中查找新行字符,这意味着您必须读取每个字节。

    可以优化您的代码,使其整洁易读,但在下面,您将始终阅读整个文件。

    如果要反复读取同一个文件,可以解析该文件并创建一个索引来存储某些行号的偏移量,例如第100行、第200行等的字节数。

        5
  •  1
  •   Andreas Dolk    15 年前

        6
  •  1
  •   finnw    15 年前

    guava

    List<String> Files.readLines(File file, Charset charset);
    

    所以你可以

    String line = Files.readLines(file, Charsets.UTF_8).get(lineNumber);
    
        7
  •  1
  •   Milson    9 年前

    使用文件Utils:

    File fileFeatures = new File(
                    "Homework1AdditionalFiles/jEdit4.3/jEdit4.3ListOfFeatureIDs.txt");
    String line = (String) FileUtils.readLines(fileFeatures).get(lineNumber);
    
        8
  •  0
  •   Mykola Golubyev    15 年前

    如果要以相同的方式处理同一文件(在某一行查找文本),则可以为文件编制索引。行号->抵消。

        9
  •  0
  •   Community paulsm4    7 年前

    据此, answer ,Java8使我们能够从文件中提取特定的行。答案中提供了一些例子。