2012-08-04 3 views
4

크기가 100MB 이상이고 ~ 15000 개의 파일이있는 큰 아카이브 (내 경우에는 zip)가 있습니다. 이 아카이브에서 단 하나의 파일 만 빨리 추출해야합니다.android의 아카이브에서 하나의 파일 압축 해제

final String zipPath = "archive.zip"; 
FileInputStream fin = new FileInputStream(zipPath); 

in = new ZipInputStream(fin); 

for (ZipEntry entry = in.getNextEntry(); entry != null; entry = in.getNextEntry()) { 
    if(entry.equals("file.name")){ 
    //unzip this entry 
    break; 
} 
} 
그것은 작동

하지만 너무 SLOW :

나는 다음 코드를 시도했다.

아카이브에 필요한 파일을 찾을 수 있습니까? 예를 들어, 리눅스에서 가능 extremally 빠른 일반적으로 명령

unzip archive.zip myfile.name 

으로, 나는 발견하고 약간의 아카이브에서 하나 개의 파일을 압축 해제해야합니다. 그것은 다른 형식 일 수 있습니다 ... 다른 형식으로 더 쉬울 수도 있습니다.

+0

그 파일 이름을 다른 방식으로 정렬 할 수 있습니까? –

+0

안녕하세요. 나는 생각한다, 부정. 일반 우편 보관소가 있습니다. 그리고 그 알파벳 순서로 아카이브 읽기에서 항목을 찾았지만 내 파일의 이름이 "zzz.file"이면 아카이브에서이 파일을 찾을 시간이 많이 있습니다. – lubart

+0

알파벳순으로 정렬 된 경우 이진 검색을 수행 할 수 있습니다 (최악의 경우 O (log (n))의 복잡함) –

답변

1

libzip library을 사용할 수 있습니다.

+0

안녕하세요! 답장을 보내 주셔서 감사합니다!하지만 libzip이 C 라이브러리 인 것을 잘 이해하면 android에서 사용할 수 있습니까? ? – lubart

+1

당신이 원하는 코드로 무엇이든 컴파일 할 수 있습니다. –

+0

팁 주셔서 감사합니다! 정말로 libzip을 android 용으로 컴파일했는데 이제는 정적 라이브러리 libzip.a가 있습니다.이 파일을 프로젝트에 포함 시켰고'static {System .loadLibrary ("zip");}'Activity. Project works! 어리석은 질문 일지 모르지만 파일을 지퍼로 묶을 수있는 방법은? 함수 목록을 어디에서 찾을 수 있습니까? 당신을 위해! 감사합니다! – lubart