java - 解压缩后无法删除 zip 文件?

标签 java unzip fileutils

我遇到了一个不寻常的问题。我正在构建一个计划每 5 分钟运行一次的工具。 它将从特定目录中提取 zip 文件并将文件(取决于文件名)提取到目标位置。我正在使用 zipentry 获取 zip 文件中的每个文件名,然后根据需要提取然后我将它们(zip 文件,一旦我完成 zip 中的所有文件)备份到特定目录,然后删除 zip文件。但有时(并非总是)zip 文件不会被删除。因为我正在使用 fileutils.forcedelete()。我遇到异常:无法删除文件。所以我将代码更改为使用 fileutils.forcedeleteonexit() 仍然有一些文件保留在源中。

这是我的代码示例:

sourceFile=new file(zipfile);
zipFile = new ZipFile(sourceFile);
zEnum = (Enumeration<ZipEntry>) zipFile.entries();
for (int a = 0; a < zipFile.size(); a++)
{
  ZipEntry zE = zEnum.nextElement();
  //Function uses zip4j for extracting. No streams used.
  extract(String sourceZipFile, String fileNameToExtract, String outputFolder);
}
//I tried it with finally either
zipFile.close();

//Using fileutils to copy. No streams used.
copyFile(sourceFile, backup);

FileUtils.forceDeleteOnExit(sourceFile);

没有使用流,但有时(并非总是)我会锁定文件。 这里的错误似乎是什么?是导致问题的 zip4j 提取还是其他原因?我正在使用 zip4j 1.3.1。

最佳答案

我认为你的问题与操作系统文件缓冲区有关,当你试图删除文件时,有时不会刷新。 您是否尝试使用 sourceFile.deleteOnExit() 而不是 FileUtils.forceDeleteOnExit(sourceFile)? 您也可以在删除之前尝试检查 sourceFile.canWrite (可能有帮助) 您还可以在删除之前尝试使用 FileInputStream():

FileInputStream fi = new FileInputStream(sourceFile);
fi.getFD().sync();

关于java - 解压缩后无法删除 zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16984226/

相关文章:

java - 可克隆的行为

java - 使用内存数据库与 Hibernate 教程如何执行?

bash - 如何在 Amazon Linux 2 上解压缩?

java - 我可以获取另一个文件的目录吗?

java - 如何使用listFilesAndDirs只获取目录而不进行递归操作

ruby-on-rails - ruby - File.open 和重命名后权限被拒绝

java - 来自 http 调用和表单的 Meteor 动态模板

java - 创建 ImageIcon 时 getClass().getResource(...) 做了什么?

java - getNextEntry() 不将文件夹显示为条目?

c++ - 在 Redhat : alternatives to system() 上从 C++ 解压缩文件