当前位置: 技术问答>java相关
何为虚拟机的关闭??
来源: 互联网 发布时间:2015-06-08
本文导语: 我有这一段程序: File file = new File("e:\exam\"); File tfile = new File(); File newfile = tfile.createTempFile("111",".xml",file); newfile.deleteOnExit(); 其中,《JAVA 2 类库》里说newfile.deleteOnExit();在虚拟机关闭时自动删除临时文件,请问...
我有这一段程序:
File file = new File("e:\exam\");
File tfile = new File();
File newfile = tfile.createTempFile("111",".xml",file);
newfile.deleteOnExit();
其中,《JAVA 2 类库》里说newfile.deleteOnExit();在虚拟机关闭时自动删除临时文件,请问什么时候是虚拟机关闭?我用JDK写的,关闭DOS后,那个临时文件还在,关闭机器后重启,还有,怎么回事?它在什么情况下才会自动删除?
File file = new File("e:\exam\");
File tfile = new File();
File newfile = tfile.createTempFile("111",".xml",file);
newfile.deleteOnExit();
其中,《JAVA 2 类库》里说newfile.deleteOnExit();在虚拟机关闭时自动删除临时文件,请问什么时候是虚拟机关闭?我用JDK写的,关闭DOS后,那个临时文件还在,关闭机器后重启,还有,怎么回事?它在什么情况下才会自动删除?
|
java类库的解释是这样的
Deletion will be attempted only for normal termination of the virtual machine, as defined by the Java Language Specification (12.9).
只有jvm正常退出才会消除临时文件。
比如
import java.io.*;
class foo{
public static void main(String []args) throws IOException{
File file = new File("e:\exam\");
File newfile = File.createTempFile("111",".xml",file);
newfile.deleteOnExit();
System.out.println(newfile);
while(true);
}
}
这样只有按ctrl+c和直接关闭DOS窗口叫非正常退出,这是不会删除文件。
如果把while(true);语句去处,就可以删除文件了。
Deletion will be attempted only for normal termination of the virtual machine, as defined by the Java Language Specification (12.9).
只有jvm正常退出才会消除临时文件。
比如
import java.io.*;
class foo{
public static void main(String []args) throws IOException{
File file = new File("e:\exam\");
File newfile = File.createTempFile("111",".xml",file);
newfile.deleteOnExit();
System.out.println(newfile);
while(true);
}
}
这样只有按ctrl+c和直接关闭DOS窗口叫非正常退出,这是不会删除文件。
如果把while(true);语句去处,就可以删除文件了。
|
上面的while(true); 目的是让程序永远不正常退出。按ctrl c打断属于非正常退出,系统当然不会及时删除临时文件。和拔电源线是一样的。
只有程序执行到末尾退出(例如把上面的while去掉),或者调用System.exit(0),才算正常退出。JVM收到这个指令,才有时间删除临时文件和真正退出。
只有程序执行到末尾退出(例如把上面的while去掉),或者调用System.exit(0),才算正常退出。JVM收到这个指令,才有时间删除临时文件和真正退出。