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.
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 Não se esqueça de marcar o título do tópico com a expressão “[RESOLVIDO]”.