【发布时间】:2013-06-03 18:26:00
【问题描述】:
我遇到了一个不寻常的问题。我正在构建一个计划每 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。
【问题讨论】:
-
什么操作系统? Windows 在文件句柄和删除方面存在臭名昭著的问题...
-
@fge:Windows.tried 在我的本地和服务器上(windows server 2008 R2)
-
@fge 在提取数据后尝试删除存档时,我无法说出多少次 Windows 告诉我“文件正在使用”,但肯定比我能指望的次数要多手。是程序没有正确关闭其文件句柄的错,还是 Windows 在程序关闭后仍保持某些文件打开?
-
即使这样也应该有解决方法。Windows 中的
admin是什么意思 -
所有文件都不能删除,还是部分文件不能删除?