2011-03-21 4 views
7

런타임시 Jar로 압축 된 폴더를 복사해야합니다. 같은 폴더에 들어있는 클래스의 함수를 호출하여이 작업을 수행하려고합니다.JAR에서 폴더를 추출하는 방법

URL sourceDirUrl = ClassLoader.getSystemResource("sourceDirName"); 
File sourceDir = new File(sourceDirUrl.toURI()); 

을했지만 작동하지 않습니다

은 내가 getSystemResource를 사용하여 시도했습니다. 아마도 재귀 적으로 getResourceAsStream 함수를 사용해야합니다. 이것을하기위한 더 우아하고 협곡적인 방법이 있습니까?

재귀 적으로해야 할 경우 : 1. 하드 코드 된 파일을 지정하고 싶지 않습니다. 동적으로 수행하려고합니다. 2. 별도의 아카이브를 만들고 싶지 않습니다. 나는 수업이 그것으로

감사

내가 Koziołek 아래에 무엇을 제안하고 결국 거래로이 자원이 같은 항아리가되고 싶어요. 좀 더 우아한 솔루션을 원했지만 이것이 좋은 것처럼 보입니다.

+0

완전한 경로로'sourceDirName'을 사용하고 있습니까? – Nishant

+0

예, 사용하신'sourceDirName'에 대한 예를 들어주세요. – asgs

+0

@Nishant - 아니, 상대 경로, 첫 번째 줄은 작동하지만 URL은 정확합니다. 폴더가 보관 파일 안에 있으므로이 URL을 기반으로 File 객체를 만들 수는 없습니다 –

답변

2

항아리는 단순한 ZIP 파일입니다. java.util.zip. * 패키지를 decompress 파일에 사용할 수 있습니다.

+0

이렇게하면 jar 파일의 위치는 다음과 같습니다. 응용 프로그램에 하드 코딩되어야합니다. – greydet

+1

nope ... getResource와 같은 메소드를 사용하여 jar 위치를 가져올 수 있습니다. –

+0

클래스 로더의 getResource 메소드처럼 간단하고 jar 패키징의 모든 가능한 경우를 고려하여 메소드를 수행하는 방법을 알고 싶습니다. – greydet

5

클래스 로더를 사용하면 클래스 경로의 리소스가 될 수 없으므로 폴더를 검색 할 수 없습니다.

몇 가지 솔루션이 가능합니다 :

  • 는, 클래스 로더의 getResource 방법을 사용하여 사전에 당신이 찾고있는 파일 이름을 알고있는 경우에 한하여 폴더를 하나의 모든 자원을 검색 할 수 있습니다.
  • 전체 폴더를 이전 방법을 사용하여 클래스 로더에서 검색 할 수있는 아카이브로 압축합니다.
  • 병을 직접 압축 해제하여 포함 된 폴더를 검색하십시오. 파일 시스템에서 항아리의 정확한 위치를 알아야합니다. 응용 프로그램에 따라 항상 가능한 것은 아니며 이식 가능하지 않습니다.

나는 이식성이 뛰어나고 유연하지만 폴더 내용을 수정하기 위해 아카이브를 다시 포장해야하는 두 번째 방법을 선호합니다.

+0

1. 하드 코딩 된 파일을 지정하고 싶지 않습니다. 동적으로 수행하려고합니다. 2. 별도의 아카이브를 만들고 싶지 않습니다.이 리소스를 다루는 클래스와 같은 Jar 파일에 넣기를 원합니다. –

+0

그래서 두 번째 제안 된 솔루션을 선호합니다.) – greydet

관련 문제