2011-11-01 4 views
1

으로 직접 연결하는 방법을 찾고 있습니다. .jar 내의 지정된 하위 디렉토리에있는 모든 파일의 목록을 가져옵니다. How do I list the files inside a JAR file?.JAR의 하위 디렉토리에서 _directly_ 하위 디렉토리의 파일을 가져 오는 방법

그러나 불행하게도 위의 방법은 전체 .JAR에있는 모든 파일을 반복합니다

이 유사하다. 많은 파일이 들어있는 .jar로 작업 할 때 - 내 경우처럼 비실용적 인 것처럼 보입니다. .jar 내의 서브 디렉토리로 직접 경로를 옮기고 jar의 모든 내용을 반복하지 않고 그 내용을 반복하고 그 결과를 필터링하여 관심있는 항목을 찾지 않으면 안됩니다. 항아리 : 파일 :/C : /jboss-4.2.2.GA/server/username/tmp - :

public static ArrayList<String> loadInternalFileListing(MetaDataType type, MetaDataLocation location, String siteId) 
{ 
    ArrayList<String> filenameList = new ArrayList<String>(); 
    URL url = getInternalFile(type, null, location, siteId); 

    JarURLConnection juc = null; 
    JarFile jarFile = null; 

    try 
    { 
    juc = (JarURLConnection) url.openConnection(); 
    jarFile = juc.getJarFile(); 
    Enumeration<JarEntry> entries = jarFile.entries(); 

    for(JarEntry jarEntry = entries.nextElement(); entries.hasMoreElements(); jarEntry = entries.nextElement()) 
    { 
     ...//logic here 
    } 
    } 
    ... //catch, handle exceptions, finally block and other logic 

    return filenameList; 
} 

변수 :>URL 여기

내가 무슨 약이다 /deploy/tmp8421264930467110704SomeEar.ear-contents/SomeBusiness.jar!/subdir1/subdir2/subdir3/subdir4/

경로 :/디렉토리 subdir1/subdir2/subdir3/subdir4/정확히 내가 반복 할 위치.

디버깅 JUC이 실제로 제대로 만들어 올바른 경로를 가리키는 것을 알 수있다. jarFile 예상대로 그냥 jar 파일 경로를 제공하여 하위 디렉토리를 잃어버린 이유와 루트에서 반복 시작하는 이유를 설명합니다. 이것은 모두 의미가 있습니다. 이것은 분명히 올바른 방법이 아닙니다. 다른 방법이 있어야합니다!

이론적으로 내가 관심있는 올바른 디렉토리를 가리키는 JarURLConnection과 함께 어울리는 것은 유용한 정보를 밝히지 않습니다. JarURLConnection.getInputStream()입니다. 디버거이 궁극적으로 ZipFileInputStream 보유하고 있음을 나타냅니다,하지만 난 그것에 접근 할 수 없으며, 더 찾고 그 모습은 바로 ZipFile를ZipFileInputStream - 원점에서 다시 저를 넣습니다.

답변

1

죄송합니다. 표준 자바 라이브러리가 아닌 다른 방법은 없습니다. zip 파일에는 항목 목록 만 포함되어 있으며 "임의 액세스"조회가 없습니다. 거기에 다른 라이브러리가있을 수 있습니다 당신을 위해 목록을 구문 분석하고 항목의 계층 적지도의 일종을 만들지 만 어느 쪽이든 일부 코드 필요한 항목을 찾기 위해 모든 항목을 반복해야합니다.

+0

게시 한 후, 이것이 zip 파일의 형식/구조로 인한 방식 일 수 있다고 생각했습니다. 감사. –

관련 문제