2014-10-31 2 views
0

간단히 말해서 Zip 파일을 byte [] 배열로받는 메소드를 작성하려고 시도하고 있습니다. Zip 파일에있는 항목 (파일)의 수와 항목이 6 개인지 테스트합니다.바이트 배열로 전송되는 zip 파일의 항목을 추출하고 읽는 방법

는 또한
List<ZipEntry> zipEntries = SomeClassName.extractZipEntries(content); 
assertTrue(zipEntries.size() == 6); 

가능하면하는 것이 더 나은 방법을 제시하지만, 이상적으로 내가 무슨 일을 : 여기

내가 테스트가 여기에있다 FileNotFoundException

public List<ZipEntry> extractZipEntries(byte[] content) throws IOException { 
    List<ZipEntry> entries = new ArrayList<>(); 

    ZipFile zip = new ZipFile(content.toString()); //Line 3 

    for (Enumeration<?> e = zip.entries(); e.hasMoreElements();) { 
     ZipEntry entry = (ZipEntry) e.nextElement(); 
     entries.add(entry); 
    } 
    return entries; 
    } 

line 3에 발생하는, 지금까지 한 일이다 위의 바로 앞으로.

감사합니다.

+0

ZipFile은 콘텐츠 스트림이 아닌 생성자로 파일 또는 파일 이름 만 사용합니다. – mikea

+0

그래서 무엇을해야합니까? –

+0

먼저 스트림을 파일에 쓴 다음 열 수 있습니다. –

답변

1

소스를보고있는 사람은 byte[]이므로 ByteArrayInputStream을 사용해야 파일을 읽을 수 있습니다.

public List<ZipEntry> extractZipEntries(byte[] content) throws IOException { 
    List<ZipEntry> entries = new ArrayList<>(); 

    ZipInputStream zi = null; 
    try { 
     zi = new ZipInputStream(new ByteArrayInputStream(content)); 

     ZipEntry zipEntry = null; 
     while ((zipEntry = zi.getNextEntry()) != null) { 
      entries.add(zipEntry); 
     } 
    } finally { 
     if (zi != null) { 
      zi.close(); 
     } 
    } 
    return entries; 
} 
+0

을 사용하십시오. –

관련 문제