2009-09-07 25 views
1

海我已经开发了其中当用户登录时,一个日志文件将创建一个独立的应用程序,当应用程序被关闭的日志文件中获取deleted.But当我关闭系统出关的日志文件不是占有deleted.what我可以做停机或系统崩溃那就是当我的应用程序是running.Can有人能帮我时删除日志文件电源关闭时删除我的日志文件中的应用关闭在java中关闭期间删除文件

感谢你 Chaithu

+0

这取决于操作系统,是不是? – Burkhard 2009-09-07 10:23:30

+0

是它的Windows操作系统 – chaithu 2009-09-07 10:25:19

+1

所以,你想要做的事当电源突然出现故障?除非你使用UPS,否则不会有任何效果。 – 2009-09-07 10:25:32

回答

11

如果VM不正常关机可能无法启动注册shutdown hooks。因此,除了File.deleteOnExit()(我假设你使用,你不给足够的细节),你也许应该想想也简单地删除您在应用程序的早期调用当你的应用程序启动时创建的所有文件。

3

你应该能够添加一个关闭挂钩:

this example应该帮助你。总之,这是基本的代码:

class MyShutdown extends Thread { 
    public MyShutdown(SimpleHook managedClass) { 
     super(); 
     this.managedClass = managedClass; 
    } 
    private SimpleHook managedClass; 
    public void run() { 
     System.out.println("MyShutDown thread started"); 
     try { 
      managedClass.freeResources(); 
     } catch (Exception ee) { 
      ee.printStackTrace(); 
     } 
    } 
} 


public SimpleHook() { 
    // set up service termination hook (gets called 
    // when the JVM terminates from a signal): 
    MyShutdown sh = new MyShutdown(this); 
    Runtime.getRuntime().addShutdownHook(sh); 
} 

问候

+0

当应用程序没有完全停止时(例如,系统崩溃或强制停止进程),可能不会执行关闭挂钩。 – Jesper 2009-09-07 11:32:07

8

您可以安排要删除的文件时,JVM使用File类的deleteOnExit()退出。但是在像系统崩溃这样的硬关机中,您无法确保日志文件被彻底删除。在这种情况下,你最好的办法是清理应用程序启动时,如果它真的是太大的问题的下一次。