-2

我正在处理一个当前每次都覆盖自身的日志文件。现在我想做的就是写在第一行并附加下面的列表以显示从最新到最旧的历史记录。问题是我不确定如何去做我正在查看代码但不知道我做错了什么。这是不确定我是否遗漏了什么的代码。

 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;
    }

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

4

2 回答 2

2

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

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

您最好的选择是将日志写入不同的文件,并在写入您想要的内容之后,然后写入原始日志文件的内容。完成后,关闭这两个文件并用新文件覆盖旧文件。

于 2012-12-27T18:20:43.567 回答
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));
}
于 2012-12-27T18:18:43.633 回答