Java -读取文件中的最后两行并删除最后一行,然后在文件末尾添加两个固定字符串值



我想读取一些文件中的最后2行,如果最后第二行的内容匹配特定字符串,则只删除最后一行。

同样,在上述操作之后,必须在修改后的文件末尾添加2行数据。我在SO上看到了其他问题,处理我的问题的不同部分,但是是否有一种简单的方法可以用最少的代码,最好是在一个函数中完成上述所有工作?(我可以组合不同的功能,但这将是混乱的…)

我建议您使用"in memory"。很容易逐行读取List,检查最后一行并更新行并将其写回文件。


例子:

public static void main(String[] args) throws IOException {
    String fileName = "test.txt";
    List<String> lines = new ArrayList<String>();
    // read the file into lines
    BufferedReader r = new BufferedReader(new FileReader(fileName));
    String in;
    while ((in = r.readLine()) != null)
        lines.add(in);
    r.close();
    // check your condition
    String secondFromBottom = lines.get(lines.size() - 2);
    if (secondFromBottom.matches("Hello World!")) {
        lines.remove(lines.size() - 1);
        lines.add("My fixed string");
    }  
    // write it back
    PrintWriter w = new PrintWriter(new FileWriter(fileName));
    for (String line : lines)
        w.println(line);
    w.close();
}

注意:在上面的例子中没有进行异常处理…例如,您需要处理文件不包含两行和其他问题的情况!

如果您有非常大的文件并且性能是一个问题,那么您可以使用RandomAccessFile并向后读取查找行终止字节以确定最后两行开始的位置。否则请使用dacwe的方法。

正如甘道夫所说,你可以:

  • RandomAccessFile,
  • 使用方法seek(long)向前跳转并读取这些行。但你不会确切知道跳跃应该有多大。
  • 要删除最后一行,你需要最后一行开始的位置,所以在读取每行之前存储它们的文件指针位置(方法getFilePointer())。使用setLength(long)

阅读和删除最后一行的例子如下:使用Java

删除文件的最后一行

有用的还可以:快速阅读文本文件的最后一行?

相关内容

最新更新