Java:删除.lck文件并确保文件写入



我的程序(服务器)有一个记录器,它是主服务器类的一个属性,所有其他类都使用它来记录错误。有没有办法在程序终止时删除.lck文件?我的代码:

private static Logger log = Logger.getLogger("ServerLog");
public Server() {
    // initialize variables
    try {
        FileHandler fh = new FileHandler(
                "src/main/resources/log/ServerLog.log", true);
        log.addHandler(fh);
        log.setLevel(Level.ALL);
        fh.setFormatter(new SimpleFormatter());
    } catch (SecurityException e) {
        getLog().log(Level.WARNING, e.getMessage());
    } catch (IOException e) {
        getLog().log(Level.WARNING, e.getMessage());
    }
}

其他类调用它来记录错误。

第二个问题:当我在像这样的文件上写作时

public final void saveRanking() {
    try {
        FileOutputStream fos = new FileOutputStream(
                "src/main/resources/database/dataRanking.out");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(getRanking());
        oos.flush();
        oos.close();
        fos.close();
    } catch (FileNotFoundException e) {
        getLog().log(Level.SEVERE, e.getMessage());
    } catch (IOException e) {
        getLog().log(Level.SEVERE, e.getMessage());
    }
}

有没有一种方法可以确保即使在写入过程中进程终止,文件也能毫无问题地保存?

如果您的代码在关闭时删除FileHandler,请确保在删除FileHandler后关闭它。当FileHandler打开时,您应该会看到锁定文件。如果您看到它们在VM退出后徘徊,那么这是因为FileHandler没有关闭,VM在处理程序关闭挂钩运行时暂停或崩溃,或者在试图删除它们时发生I/O异常。

您可能正在运行JDK-6774110,当使用子记录器时,锁定文件未被删除。没有对此进行评估,但我认为当记录器被垃圾收集时可能会发生这种情况。请参阅JDK-6274920:JDK记录器强烈引用java.util.logging.logger实例。

相关内容

  • 没有找到相关文章

最新更新