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

时间:2011-10-07 07:07:17

标签: java file

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

此外,在上述操作之后,必须将2行数据附加到修改文件的末尾。我在SO上看到了其他关于问题的不同部分的问题,但有一种简单的方法可以用最少的代码完成上述所有操作,最好是在单个函数中吗? (我可以结合SO提供的不同功能,但这会很混乱......)

3 个答案:

答案 0 :(得分:2)

我建议你“在记忆中”这样做。它很容易逐行读入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();
}

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

甘道夫说你可以:

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

我阅读和删除您在此处的最后一行的示例: Deleting the last line of a file with Java

有用也可以: Quickly read the last line of a text file?