2014-04-22 24 views
12

Próbuję usunąć plik JAR za pomocą języka Java 5 (dlatego interfejs API ścieżek wprowadzony w języku Java 7 nie jest dostępny).Nie rozumiem działania obiektu File object.delete()

Mój kod:

String sep = File.separator; 

File test = new File("."+ sep + "server" + sep + "lib" + sep + "testJar.jar"); 
if(test.delete()) 
{ 
    logger.log(Level.INFO,test.getName() + " deleted."); 
} 
else 
{ 
    logger.log(Level.INFO,"Delete operation is failed for "+test.getName()); 
} 

Kiedy mój kod zostanie wykonany plik jar zostanie usunięty, ale Delete operation is failed for testJar.jar jest drukowany w logs.Cant zrozumieć why..any pomoc jest mile widziana.

UPDATE: Próbowałem ponownie ten sam kod i tym razem mówi testJar.jar deleted teraz jestem zdezorientowany co się dzieje

+3

Prawdopodobnie plik JAR jest otwarty przez kogoś takiego jak na przykład JVM. Możesz spróbować użyć 'deleteOnExit', który spróbuje usunąć plik, gdy JVM zakończy się normalnie, ale prawdopodobnie nadal nie będzie działać. Wierzę, że Java 7 koryguje ten problem, ponieważ 'Classloader' zamyka Jar, kiedy skończy czytać ... – MadProgrammer

+11

Użyj' Files.delete (Path) '- który zgłasza wyjątek, zamiast zwracać wartość' boolean'. Aby uzyskać 'Path', użyj' File.toPath' dla 'Paths.get'. To powinno dać opisowy błąd. –

+0

@BoristheSpider Dzięki za wskazówkę. Nio został wprowadzony w java 7, a ja jestem ograniczony do pracy z java5..nie sugestie na to? – amudhan3093

Odpowiedz

1

widzę ten problem magicznie zniknęły, ale pewne ogólne wskazówki dotyczące rozwiązywania problemów:

Przede wszystkim; spróbuj utworzyć i usunąć kolejny plik i sprawdź uprawnienia/własność pliku.

Sprawdź, czy inny proces nie trzyma plik:

$ lsof filename 

Test bazowy wezwanie OS.

File.delete() będzie delegować do podstawowego systemu operacyjnego i zazwyczaj kończy się na wywoływaniu remove (lub odłączenia). Jeśli korzystasz z OpenJDK, powinieneś móc przeglądać kod źródłowy. Jeśli nie, sprawdź, czy możesz prześledzić, co dzieje się "pod kołdrą".

Napisz small snippet, który po prostu wykonuje to połączenie i zobacz, jak zachowuje się system operacyjny podczas próby usunięcia tego pliku.

0

Usuwanie plików nie powiedzie się, jeśli plik, który próbujesz usunąć, nie istnieje, jest zablokowany. Z przyczyn bezpieczeństwa również zawiedzie (niewystarczające uprawnienia do wykonania w systemie lokalnym)

Typowy przypadek jest zablokowany, na przykład, jeśli słoik jest używany przez uruchomioną aplikację lub jest otwierany wyłącznie lub analizowany przez narzędzie (np. Program antywirusowy)), ...