当我不想要它时覆盖文本文件。 - Java

时间:2012-12-27 18:15:50

标签: java text-files filewriter

我正在处理一个目前每次都在覆盖自己的日志文件。现在,我想要做的就是在第一行写下并附加下面的列表来显示从最新到最旧的历史。问题是我不知道该怎么做我正在查看代码但不知道我做错了什么。以下代码不确定我是否遗漏了某些东西。

 String historylog = new Date().toString();

    BufferedWriter bw = null;

    String filepath = "C:\netbeans\Source code\test3";
    String filename = "PatchHistory.log";

    try
    {
        if (!(new File( filepath).exists()))
            (new File( filepath)).mkdirs();
        bw = new BufferedWriter( new FileWriter( filepath + File.separator
       + filename, true));

        bw.write( historylog + "\r\n");
        bw.newLine();
        bw.flush();
        bw.close();
        return true;
    }

    catch (IOException){

    return false;
    }

任何帮助将不胜感激,不确定我做错了什么。

2 个答案:

答案 0 :(得分:2)

如果我了解你,你想在日志文件的开头添加日志条目。

AFAIK,(如果您知道任何例外,请告诉我)所有文件系统都将数据添加到文件末尾。直接访问会覆盖文件的开头。

您最好的选择是将日志写入另一个文件,并在写完所需内容之后,写入原始日志文件的内容。完成后,关闭两个文件并用新文件覆盖旧文件。

答案 1 :(得分:1)

在您的代码中

你错了,你没有正确使用if陈述。

 if (!(new File( filepath).exists()))
        (new File( filepath)).mkdirs(); // file path not exist, then it will execute
    bw = new BufferedWriter( new FileWriter( filepath + File.separator + filename, true)); // this append file will always execute

解决方案

if (!(f.exists())) {
//create new file
bw = new BufferedWriter(new FileWriter(filepath + File.separator + filename, false));
}
else{
//append in existing file
bw = new BufferedWriter(new FileWriter(filepath + File.separator + filename,true));
}