[RESOLVIDO]Arquivo FormFile para ZipFile

Alguem sabe como usar o ZipFile para abrir um arquivo zip e varrer todos os arquivos dentro dele ??? Eu estou recebendo um FormFile da minha JSP, eu gostaria de ver os arquivos que tem dentro do zip antes de salva-los eu acredito que usando ZipFile funcione.
Alguem tem ideia de como fazer isso?
Se puderem me ajudar obrigado.

http://www.exampledepot.com/egs/java.util.zip/ListZip.html

Opa roger brigadao, isso me adiantou bastante,
Só que estou com o seguinte problema.
Eu gostaria de saber o seguinte:
O usuário foi lá adicionou um arquivo .zip , eu quero varrer e validar ele antes de salvar.
Dessa forma que você me mostrou tem que salvar o arquivo antes de abrir e varrer.

Brigadao.

Talvez isso ajude:

http://stackoverflow.com/questions/357851/in-java-how-to-zip-file-from-byte-array

você pode me explicar o código não entendi. Pelo que eu entendi aqui ele está salvando no zip ta pegando um array de bytes e jogando no zip.
public static byte[] zipBytes(String filename, byte[] input) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
ZipEntry entry = new ZipEntry(filename);
entry.setSize(input.length);
zos.putNextEntry(entry);
zos.write(input);
zos.closeEntry();
zos.close();
return baos.toByteArray();
}
certo ou estou errado?

Ainda não consegui alguém sabe?

Com a classe ZipInputStream você pode ler em memória um arquivo ZIP informado pelo usuário:

http://java.sun.com/developer/technicalArticles/Programming/compression/

Consegui kra !!! Segue o método para solução.

        //List<String> arquivos, vai receber a lista de arquivos que eu quero que esteja dentro do zip, para validar.
        //FormFile formFile é da lib do struts(org.apache.struts.upload.FormFile), ele tras pra você o arquivo da JSP.

	public static boolean possuiArquivos(FormFile formFile, List<String> arquivos) throws FileNotFoundException, IOException {
		boolean result = false;
		ArchiveInputStream in = null;
		List<String> arquivosZipados = new ArrayList<String>();
		InputStream is = formFile.getInputStream();
		
		try {
			
			in = new ArchiveStreamFactory().createArchiveInputStream("zip", is);
						
			ZipArchiveEntry entry = null;
			while((entry = (ZipArchiveEntry)in.getNextEntry()) != null) {
				if (!entry.isDirectory()) {
					arquivosZipados.add(FilenameUtils.getName(entry.getName()));
				}
			}
			
			result = arquivosZipados.containsAll(arquivos);

		} catch (Exception e) {
			LOG.error("", e);
		} finally {
			IOUtils.closeQuietly(in);
		}
		
		return result;
	}
               
                //Descompactando o zip.
        	public void descompactar(String arquivo, String diretorio, boolean recursivo) {
		OutputStream out = null;
		ArchiveInputStream in = null;
		
		try {
			File file = new File(arquivo);
			FileInputStream fs = new FileInputStream(file);

			in = new ArchiveStreamFactory().createArchiveInputStream("zip", fs);

			ZipArchiveEntry entry = null;
			while((entry = (ZipArchiveEntry)in.getNextEntry()) != null) {
				
				if (entry.isDirectory()) {
					if (recursivo) {
						FileUtils.forceMkdir(new File(diretorio, entry.getName()));
					}
				} else {
					if (recursivo) {
						out = new FileOutputStream(new File(diretorio, entry.getName()));						
					} else {
						out = new FileOutputStream(new File(diretorio, FilenameUtils.getName(entry.getName())));
					}
					IOUtils.copy(in, out);
				}
			}

		} catch (Exception e) {
			LOG.error("", e);
		} finally {
			IOUtils.closeQuietly(in);
			IOUtils.closeQuietly(out);
		}
	}

Fico contente que seu problema esteja solucionado :slight_smile: Não se esqueça de marcar o título do tópico com a expressão “[RESOLVIDO]”.