file的delete()和deleteOnExit()的区别!

  public void wordToHtml(String docPath){
    String htmlPath=docPath.substring(0, docPath.indexOf("."));
    Dispatch.invoke(doc,"SaveAs",Dispatch.Method,
        new Object[]{htmlPath,new Variant(8)},new int[1]);
    File htmlFile=new File(htmlPath+".htm");
    htmlFile.deleteOnExit();
  }
 
     
  public HashMap<Integer,String> getImagesPath(String docPath){
    int count=0;
    String filePath=docPath.substring(0,docPath.indexOf("."))+".files";
    File file=new File(filePath);
    HashMap<Integer,String> hm =new HashMap<Integer,String>();
    if(file.isDirectory()){
      File[] files=file.listFiles();
      for(File f:files){
        if(f.exists()){
          String fileName=f.getName();
          String fileSuffix=fileName.substring(fileName.lastIndexOf(".")+1);
          if(fileSuffix.equalsIgnoreCase("jpg")||fileSuffix.equalsIgnoreCase("png")){
            ++count;           
            if(count%2==0){
              hm.put(count/2, f.getAbsoluteFile()+"");
            }else{
              f.delete();
            }
             
          }else{
            f.delete();
          }
        }
      }
     
    return hm;     
  }
下面是我写的一个测试类:
  public void test(){
    ReadDocuments rd=new ReadDocuments();
    rd.setVisible(false);
    rd.openDoc("D:\\试验.docx");
    rd.wordToHtml("D:\\试验.html");
    HashMap hm=rd.getImagesPath("D:\\试验.docx");
    Iterator<Integer> it=hm.keySet().iterator();
    while(it.hasNext()){
      System.out.println(hm.get(it.next()));
    }
    rd.deleteTempFiles("D:\\试验.docx");
    rd.closeWord();
  }

     根据API文档,可以得到最直观的两点信息:
delete ()
                    删除此抽象路径名表示的文件或目录。
deleteOnExit ()
                    在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
     可以这样理解,JVM是Java程序运行的环境,当运行test()方法时,JVM随之启动,它也有自己的生命周期。当调用delete()方法直接删除文件时,不用判断文件是否存在,一经调用立即执行;而调用deleteOnExit()方法时,我的理解是只是相当于对deleteOnExit()作一个声明,当程序运行结束,JVM终止时才真正调用deleteOnExit()方法实现删除操作。
     在wordToHtml()类中,将word文档转化为html格式时,除生成的html之外,系统还会生成一个.files的文件用来存放word中的图片等相关信息,而.files文件中的图片才是我所要的。当我将其中的deleteOnExit()方法改为delete()方法时会出现删除不干净或者是无法删除html的现象。我的理解是word转化为html是多线程的,多个线程的执行时间长短不一,当某个线程结束出发delete()事件的时候,可能其他的线程仍在执行,顾出现删除不了或无法删除的现象。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值