私は異常な問題に直面しています.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を使用しています。