Java - 仅保存最新项目的日志文件

时间:2014-10-27 13:56:25

标签: java filewriter printwriter

我正在用Java编写应用程序(新开发人员),我正在尝试在日志文件(logs / [date] .txt)中保存消息和类似的东西。我得到的问题是它每次都被覆盖,而不是将值附加到我的文件中。

这是我的代码:

public void onMessage(String channel, String nick, String account, String hostname, String message) {
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss dd/MM/yyyy");
    SimpleDateFormat sdfd = new SimpleDateFormat("dd/MM/yyyy");
    Date now = new Date();

    try {
        /* Check if the logs folder exists */
        File logdir = new File("logs/");

        boolean result = true;
        if (!logdir.exists()) {
            try {
                logdir.mkdir();
            }catch(Exception e){
                System.err.println("[ERROR] Could not make directory 'logs/'");
                result = false;
            }
        }

        /* Check if the log file exists */
        File fcheck = new File("logs/" + sdfd.format(now).replace("/", "-") + ".txt");
        if (!fcheck.exists()) {
            try {
                fcheck.createNewFile();
            }catch (Exception e){
                System.err.println("[ERROR] Could not make log file 'logs/" + sdfd.format(now).replace("/", "-") + ".txt'");
            }
        }

        /* Write to file */
        if (result) {
            FileWriter file = new FileWriter("logs/" + sdfd.format(now).replace("/", "-") + ".txt");
            PrintWriter write = new PrintWriter(file);

            String entry = "[" + sdf.format(now) + "] [" + channel + "] " + nick + " (" + account + ") > " + message + "\n";
            write.append(entry);

            write.close();
            file.close();
        }else{
            System.err.println("[ERROR] Could not save line to log file.");
        }
    }catch (Exception e){
        System.err.println("[ERROR] Could not save line to log file.");
    }
}

很抱歉,如果这不是很清楚,但我还在学习Java。 正如您所看到的,我有write.append(entry); - 我认为它会在我的日志文件中附加\ n,因此允许我保存并保存并保留所有条目。

3 个答案:

答案 0 :(得分:0)

创建File类型的对象时,添加第二个参数true,并附加文件

FileWriter fcheck = new FileWriter("logs/" + sdfd.format(now).replace("/", "-") + ".txt",true);

答案 1 :(得分:0)

FileWriterappend参数设置为true

 FileWriter file = new FileWriter("logs/" + sdfd.format(now).replace("/", "-") + ".txt", true);

答案 2 :(得分:0)

您正在关闭每个条目的PrintWriter - 每次调用该方法时都会创建一个新实例,并且文件被覆盖。

如果您不想更改此设置,可以使用FileWriter(String, boolean)FileWriter设置为附加模式

FileWriter file = new FileWriter("logs/" + sdfd.format(now).replace("/", "-") + ".txt", true);
PrintWriter write = new PrintWriter(file);