2014-04-22 9 views
12

Java 5를 사용하여 jar 파일을 삭제하려고합니다 (Java 7에서 소개 된 Paths API는 옵션이 아닙니다).Cant가 File의 작업을 이해합니다. object.delete()

내 코드 :

내 코드가 삭제 jar 파일을 실행 도착하지만 Delete operation is failed for testJar.jar가 logs.Cant에 인쇄
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()); 
} 

이 why..any 도움이 이해가 감사합니다.

업데이트 : 동일한 코드를 다시 시도하고,이 시간이 testJar.jar deleted 지금 내가 무슨 일이 일어나고 있는지 혼란 스러워요 말한다

+3

예를 들어 JVM과 같이 Jar 파일이 열려있을 가능성이 큽니다. 'deleteOnExit'을 사용하면 JVM이 정상적으로 종료되었을 때 파일을 삭제하고 삭제할 수 있습니다.하지만 여전히 작동하지 않을 가능성이 있습니다. Java 7은'Classloader'가 Jar 파일을 읽는 것을 끝내면 Jar 파일을 닫음으로써이 문제를 해결할 수 있다고 믿고 있습니다. – MadProgrammer

+11

'Files.delete (Path)'를 사용하십시오 -'boolean'을 리턴하지 않고 예외를 던집니다. 'Path'를 얻으려면'Paths.get'에'File.toPath'를 사용하십시오. 그것은 당신에게 설명적인 오류를 줄 것입니다. –

+0

@BoristheSpider 팁을 주셔서 감사합니다. nio는 java5와 함께 작동하도록 제한되어 있지만 java 7에서 도입되었습니다. 제안 사항은 무엇입니까? – amudhan3093

답변

1

나는이 문제가 마술처럼 사라졌다 볼 수 있지만, 몇 가지 일반적인 문제 해결 팁 :

우선; 다른 파일을 만들고 삭제하고 파일 권한/소유권을 확인하십시오. 다른 프로세스가 파일을 보유하지 않는

확인 :

$ lsof filename 

시험 기본 OS 호출.

File.delete()는 기본 OS에 위임하고 일반적으로 remove (또는 링크 해제)을 호출합니다. OpenJDK를 사용하는 경우 소스 코드를 탐색 할 수 있어야합니다. 그렇지 않다면, "덮개 아래에서"일어나는 일을 추적 할 수 있는지보십시오.

small snippet을 작성하면이 호출을 실행하고이 파일을 시도하고 삭제할 때 OS가 어떻게 작동하는지 볼 수 있습니다.

0

삭제하려는 파일이 존재하지 않으면 파일 삭제가 차단됩니다. 보안상의 이유로 (로컬 시스템에서 실행하기에 충분한 권한이 없음)

예를 들어 실행중인 응용 프로그램에서 jar를 사용하거나 독점적으로 열거 나 항 바이러스), ...