【问题标题】:Files deleting issue文件删除问题
【发布时间】:2015-04-30 05:25:18
【问题描述】:

我有这段代码,它必须从目录和目录本身中删除文件:

private static void removeTempFiles(File dir){
        if(!dir.exists())
            return;
        if(dir.isDirectory()){
            for(File f : dir.listFiles())
                removeTempFiles(f);
            dir.delete();
        }
        else {
            dir.delete();
        }
    }

但执行此代码不会删除所有文件。它有时会删除文件夹中的所有文件或仅删除几个文件

统一更新: 这是我的创建文件代码:

 File tempFolder = new File(tempPath);
    tempFolder.mkdir();
    tempFolder.mkdirs();    
    FileOutputStream fileOut = new            FileOutputStream(tempPath+"/"+fileName);    
        OutputStreamWriter osw = new OutputStreamWriter(fileOut, "windows-1251");
            try{
                osw.write(file64);
            } catch (IOException e){
                e.printStackTrace();
            }finally {
osw.close();
                fileOut.close();
            }

【问题讨论】:

标签: java file


【解决方案1】:

在 Windows 上,文件删除并不总是成功是正常的,因为文件可以被系统上运行的各种服务(防病毒、搜索索引等)锁定。您需要在每个文件删除调用周围添加一个重试循环。

【讨论】:

  • 你的意思是直到 file.delete 为真?
  • 通常您不想进行无限次重试。尝试 10 次通常是可以的。
  • @我刚刚创建了一个循环,直到 file.delete 为真并且它仍在运行。超过 10 次尝试
  • 那么文件实际上被其他进程锁定了。您可以使用Process Explorer 来检查哪个进程打开了该文件。
  • 当我的应用未运行时,没有进程使用此文件。当应用程序运行时,我的意思是当删除循环正在执行一些“不存在的进程”时正在使用它,我猜是应用程序本身
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2010-11-06
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多