我想读取某些文件中的最后两行,如果第二行的内容与特定字符串匹配,则只删除最后一行。
此外,在上述操作之后,必须将2行数据附加到修改文件的末尾。我在SO上看到了其他关于问题的不同部分的问题,但有一种简单的方法可以用最少的代码完成上述所有操作,最好是在单个函数中吗? (我可以结合SO提供的不同功能,但这会很混乱......)
答案 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)
甘道夫说你可以:
我阅读和删除您在此处的最后一行的示例: Deleting the last line of a file with Java