日期:2014-05-20  浏览次数:20694 次

f.deleteOnExit(); 这方法不需要对象吗?

import   java.io.*;
class   Test
{
    public   static   void   main(String[]   args)   throws   Exception
    {
        for(int   i=0;i <5;i++)
        {
            File   f=File.createTempFile( "unhappyless ", ".bmp ");
            f.deleteOnExit();       //对象的生存期只在   for   循环内,第二次循环时第一次生成的对象引用不就没保存了,那为什么   JVM   退出时,还能找到该对象,并且执行删除?
        }
          Thread.sleep(3000);
    }
}


------解决方案--------------------
系统会记录的
对程序员来说,它是不存在的,但对jvm来说,它可以决定在什么时候回收,你创建过的所有文件都会有记录(如果你指定该文件退出後删除的话)

ps:发错版面了
------解决方案--------------------
楼上的不要误导别人
File.createTempFile(String 前缀,String 后缀)
生成一个 "前缀+随机字符串+后缀 "的文件
每次随机字符不一样

循环5次,会生成5个临时文件
------解决方案--------------------
我个人觉的createTempFile是在硬盘上创建一个临时文件,它已经在硬盘上写入,而JAVA收回的只是本身的垃圾,而不是硬盘上的
------解决方案--------------------
JDK 自带的源码
File类:
public void deleteOnExit() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkDelete(path);
}
DeleteOnExitHook.add(path);
}
要养成看代码的习惯
------解决方案--------------------
redduke1202贴的代码已经说明了问题