Mam do czynienia z nietypowym problemem. Buduję narzędzie, które ma być uruchamiane co 5 minut. Przejmie pliki zip z określonego katalogu i wyodrębni pliki (w zależności od nazwy pliku) do miejsca docelowego. Używam zipentry
, aby pobrać każdą nazwę pliku w pliku zip, a następnie wyodrębnić w razie potrzeby, a następnie zarchiwizuję je (pliki zip, gdy skończę wszystkie pliki w pliku ZIP) do określonego katalogu, a następnie usuniemy plik zip. Ale czasami (nie zawsze) pliki zip nie są usuwane. Ponieważ używam fileutils.forcedelete()
. Otrzymuję wyjątek: nie można usunąć pliku. Więc zmieniłem kod na użycie fileutils.forcedeleteonexit()
, ale niektóre pliki pozostają w źródle.Nie można usunąć pliku zip po rozpakowaniu?
Oto przykład z mojego kodu:
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);
Brak strumienie używane, ale jestem coraz blokadę na plikach czasami (nie zawsze). Co wydaje się być tutaj błędem? Czy to ekstrakcja zip4j powoduje problem lub cokolwiek innego? Używam zip4j 1.3.1.
Jaki OS? Windows ma notorycznie problemy z uchwytami plików i usuwanie ... – fge
@fge: Windows.tried w moim lokalnym i na serwerze (Windows Server 2008 R2) –
@fge Nie mogę powiedzieć, ile razy Windows powiedział mi "plik w użyj "podczas próby usunięcia archiwum po wyodrębnieniu jego danych, ale z pewnością było to więcej razy, niż mogę liczyć na obie ręce. Czy jest to wina programów, które nie zamykają poprawnie swoich uchwytów plików, czy też Windows utrzymuje pewne pliki otwarte nawet po zamknięciu programów? – JAB