我想将系统关闭时间写入txt文件。我正在使用shutdownhook线程。
我已经在线程的run方法中编写了文件写入机制。但它不起作用..这是我的代码..
public class JVMShutdownHookTest {
public static void main(String[] args) {
JVMShutdownHook jvmShutdownHook = new JVMShutdownHook();
Runtime.getRuntime().addShutdownHook(jvmShutdownHook);
System.out.println("JVM Shutdown Hook Registered.");
System.out.println("Pre exit.");
}
private static class JVMShutdownHook extends Thread {
public void run() {
System.out.println("JVM Shutdown Hook: Thread initiated.");
File file = new File("C:\\Users\\karthi\\Desktop\\Shutdown.txt");
try {
//FileWriter fw = new FileWriter(file, true);
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));
pw.println("Shutdown Time is ======= " + Calendar.getInstance().getTime());
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
答案 0 :(得分:2)
您通常应该避免使用关闭挂钩用于任何有用的目的:它们仅作为清理的最后设施,并且绝对不会获取任何新资源,例如打开文件。绝对不能保证这样的代码在关闭钩子中会成功。
您必须设计一个在关机时执行代码的显式机制。
答案 1 :(得分:0)
代码看起来正确,但您可能遇到文件编写功能
的问题答案 2 :(得分:0)
大多数系统(我知道)会记录系统何时关闭。你是否绝对需要使用Java,你是否绝对需要独立获得时间?如果您只需要系统关闭时间,那么读取系统日志可能会更容易(也更清晰)。
答案 3 :(得分:0)
你是什么意思,它不起作用?我试过,它在我的机器上工作正常。
您是否收到错误,未创建文件或其内容与预期不同?
答案 4 :(得分:-1)
我想问题是你的班级会在拦截停机之前结束执行...... 尝试在main方法的末尾添加一个无限循环或一个非常长的Thread.sleep()并重试。在你的情况下,jvm将立即发出声响,你将有执行结束时间!