Java 关闭应用程序时刷新printwriter

Java 关闭应用程序时刷新printwriter,java,multithreading,interrupt,interrupt-handling,shutdown-hook,Java,Multithreading,Interrupt,Interrupt Handling,Shutdown Hook,所以我有一个printwriter,它偶尔会写入一个文件(“偶尔”这里的意思是“在一定数量的指定事件之后周期性地”) 现在,如果这些事件碰巧太少,那么当应用程序终止时,日志文件可能会变成空的(Ctrl+C) 当然,我可以在每次println之后flush,但这会破坏使用非自动flush printwriter的目的(如果我想将文件作为构造函数参数传递,这是唯一可以创建的类型) 在Java中是否有一个onApplicationKill——当应用程序终止时,我可以用它来刷新写入程序一次?或者在当前线

所以我有一个printwriter,它偶尔会写入一个文件(“偶尔”这里的意思是“在一定数量的指定事件之后周期性地”)

现在,如果这些事件碰巧太少,那么当应用程序终止时,日志文件可能会变成空的(
Ctrl+C

当然,我可以在每次
println
之后
flush
,但这会破坏使用非自动flush printwriter的目的(如果我想将
文件
作为构造函数参数传递,这是唯一可以创建的类型)


在Java中是否有一个
onApplicationKill
——当应用程序终止时,我可以用它来刷新写入程序一次?或者在当前线程被终止时要检测的内容?

您可以使用关机挂钩:

Runtime.getRuntime().addShutdownHook(new Thread() {
  public void run() {
      ...
      writer.flush();
  }
});
如果你用
Ctrl+C

杀死它,它也应该能工作。看一看!