有一个火急的问题:我在JAVA程序中用java.io.File.delete()删除文件时,当文件较小时,一般都成功了。但是,当文件增大时,比如为1M以上或更大时,删除文件一般都不成功,这让我非常纳闷。诚心向各位大虾请教,JAVA删除文件时有何限制?保险的删除文件方式是怎样的?

解决方案 »

  1.   

    没有显示什么,只是testFile.delete()==false,单独做一个测试删除文件的程序,不论文件多大都能成功,我现在的删除方法是嵌套在一个线程当中,才出了问题
      

  2.   

    以下是这段程序:
    class MyThread extends Thread {
      static ConvertCdr cdr = new ConvertCdr(); 
      public synchronized void run (String mypath,String filename) {
        ListeningFile client = new ListeningFile();
        File myfile[] = client.displayAllFileOfDirectory(mypath);//取目录mypath所有合适的文件
           if (myfile.length>0){
             for(int i=0;i<myfile.length;i++){
               if(myfile[i].isFile()){
                 filename = myfile[i].getName();
                 System.out.println("正在处理文件" + filename + "...");
                 
                 //invoke Method ConvertCdr.rateProccess()
                 try{
                  File cdrFile = new File(mypath+filename);             
                    cdr.rateProcess(cdrFile);//对文件的处理,与删除不相干
                   
                    if (cdrFile.isAbsolute())
                    if (cdrFile.delete() == false)//当文件在1M以上时,基本上都会false
                    System.out.println("Delete failed ...");
                 }
                 catch(Exception e){
                    System.out.println("Error: "+e.getMessage());
                 }
               }
             }//end for
           }
      }
    }
      

  3.   

    可能是:
    cdr.rateProcess(cdrFile);//对文件的处理,与删除不相干
    引起的
    在处理文件后,即使已关闭打开的文件,由于系统缓冲关系(特别是大文件),文件仍处于锁定状态(以前用VC就碰到过)
    你可用以下伪代码试试
       for(i=i;i<5;i++) // 试5次
        {
           if (cdrFile.delete() == true)
               break;
           Sleep(100);     // 等.1秒
        }
      

  4.   

    我已经找到了解决办法,那就是在delete()方法前进行垃圾回收,调用System.gc()即可。谢谢各位!