【问题标题】:Delete a zip file after unzip in java在java中解压后删除一个zip文件
【发布时间】:2011-03-07 06:24:51
【问题描述】:

如何在java中删除一个zip文件? file.delete 方法返回 false。为什么?

File file = new File("/mibook/"+mFilename+"/"+mZipname.toString());
boolean deleted = file.delete();

编辑:
规则“目录在删除前应该为空..”是否适用于 zip 文件?

我的文件解压码


   public void unzip() throws IOException { 
        FileInputStream fin=null;
        ZipInputStream zin=null;
        File file =null;
        ZipEntry ze ;
        FileOutputStream fout=null;
        try{ 
            System.out.println(_zipFile );
            System.out.println(_location);
            fin = new FileInputStream(_zipFile); 
            zin = new ZipInputStream(fin); 
            ze= null; 
            byte[] buffer = new byte[1024];
            int length;
            while ((ze = zin.getNextEntry()) != null) { 
                file = new File((_location +"/" + ze.getName()));
                file.getParentFile().mkdirs();
                 fout= new FileOutputStream(_location + ze.getName()); 
                while ((length = zin.read(buffer))>0) {
                    fout.write(buffer, 0, length);
                }
                zin.closeEntry(); 
                fout.close();
} zin.close(); }catch(Exception e) { Log.e("Decompress", "unzip", e); }
finally {
            fin.close();
            zin.close();
            fout.close();


    }

} 

【问题讨论】:

  • 请贴出你用过的代码。
  • 为了尽快获得更好的帮助,请发布 SSCCE (pscode.org/sscce.html)。鉴于问题代码下载的是 Zip,您可以使用我网站 (pscode.org/jws/api.html#bs) 上的 basicservice.zip 文件,它很小,约为 3Kb。

标签: java delete-file


【解决方案1】:

您必须确保关闭您的 ZipFile。

例如我有:

ZipFile zFile = new ZipFile("blah");
//lots-o-code
zFile.close();
File file = new File("blah");
file.delete();

【讨论】:

    【解决方案2】:

    如果file.delete() 返回 false,那么我的猜测是另一个进程打开了 zip 文件 - 甚至可能是您自己的进程。

    • 检查您的路径是否正确,例如file.exists() 返回什么?
    • 检查您是否有权以运行您的应用程序的用户身份删除文件
    • 检查您的代码中是否没有打开文件的句柄(例如,您是否只是从中读取并没有关闭输入流?)
    • 检查您没有在桌面应用程序中打开文件

    【讨论】:

    • @jon 在我的代码中,我只需下载一个 zip 文件并解压缩到其他位置,然后我尝试删除 zip 文件。违反任何条件?如果是这样,我怎么能从中恢复过来?
    • 假设您在 Java 中完成了所有这些,最可能的问题是您的代码仍然打开了 ZipStream。
    • @vnshetty:我同意斯蒂芬的观点。我怀疑您未能在某处关闭流。但是,如果没有看到您的代码,我们就无法判断。
    • @Stephen@jon 编辑了我的任务。
    • @vnshetty:我很高兴,但为了完整起见,您的每个 close 方法都应该在自己的 finally 块中(或使用类似 Guava 的 closeQuietly 方法)。否则如果一个 close 方法抛出异常,其他流将不会被关闭。
    【解决方案3】:

    这在尝试删除您创建的文件时很常见。请务必close您用于创建解压缩文件的 FileWriter。

    如果您不知道在哪里关闭文件,最好的办法是调用file.deleteOnExit(),即使您不小心打开了一些文件句柄,也应该会成功。

    【讨论】:

      【解决方案4】:

      使用:FileUtils.delete(yourFile);

      这解决了我的问题

      【讨论】:

        猜你喜欢
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 2021-04-29
        • 2016-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多