[Resolvido] Varredura de arquivos ZIP em Java

Bom dia,
Estou em um projeto que preciso pegar um zip e validar quantos arquivos TXT ou XML este zip possui, vi diversos artigos que fazem o unzip e a compressão, mas meu caso é a simples leitura da quantidade e tipo de arquivos que este zip possui, alguém já viu algo assim ou conhece algum frameworks que poderia me dar um note para isso?

Obrigado 8)

http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipFile.html

Veja, em particular:
http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipFile.html#entries() e
http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipEntry.html

Framework? Não conheço, mas não acho que seja necessário. Pra iterar os entries de um zip é bem simples:[code] public static void main(String[] args) throws IOException{
ZipFile zip = new ZipFile(“meuArquivo.zip”);

	Enumeration<? extends ZipEntry> enumeration = zip.entries();
	
	while(enumeration.hasMoreElements()){
		System.out.println(enumeration.nextElement().getName());
	}
}[/code]

[quote=entanglement]http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipFile.html

Veja, em particular:
http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipFile.html#entries() e
http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipEntry.html[/quote]

Opa, estou vendo e aparentemente já vem desde o JDK 5, vlw, depois posto o código assim que terminar. :smiley:

De qualquer maneira, o formato de um arquivo .zip é relativamente simples. Eu tive de implementar a leitura de um diretório de arquivos .zip separados em disquetes, e obviamente isso não está implementado pelo Java mas está documentado.

[quote=Rodrigo Sasaki]Framework? Não conheço, mas não acho que seja necessário. Pra iterar os entries de um zip é bem simples:[code] public static void main(String[] args) throws IOException{
ZipFile zip = new ZipFile(“meuArquivo.zip”);

	Enumeration<? extends ZipEntry> enumeration = zip.entries();
	
	while(enumeration.hasMoreElements()){
		System.out.println(enumeration.nextElement().getName());
	}
}[/code][/quote]

Isso mesmo, Obrigado a vc Sasaki e ao entanglement.

Cheguei a ver muitos tutoriais a respeito, mas como todos eles o povo descompactava e para o que eu quero não serviria, mas está ok, consegui obter as informações que preciso para a validação de alguns zips que enviam ao sistema que estou montando, obrigado.

Bom devido as ajudas consegui fazer uma versão alpha (ainda vou separar em métodos e fazer as validações que preciso, mas as informações que eu queria lendo o TXT e o XML que precisava já consegui, vou deixar esse código como o prometido caso um dia alguém precise fazer algo assim:

[code]
public class ZipUtil {

            public static void main(String[] args) throws Exception{
                           File file = new File("R:/meu.zip");
                           ZipFile zipFile = new ZipFile(file);
                           Enumeration<? extends ZipEntry> enumeration = zipFile.entries();
                           ZipEntry entry = enumeration.nextElement();
                           InputStream is = zipFile.getInputStream(entry);
                           byte[] buffer = new byte[is.available()];
                           is.read(buffer);
                           System.out.println(new String(buffer).split("\n").length);

                           entry = enumeration.nextElement();
                           SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
                           is = zipFile.getInputStream(entry);
                           buffer = new byte[is.available()];
                           is.read(buffer);
                           DocumentReader reader = new DocumentReader();
                           parser.parse(new ByteArrayInputStream(buffer), reader);
                           System.out.println(reader.contador);
            }

            private static class DocumentReader extends DefaultHandler {
                           private int contador = 0;
                           @Override
                           public void startElement(String uri, String localName, String qName,
                                                           Attributes attributes) throws SAXException {
                                           if(qName.equalsIgnoreCase("documento")){
                                           contador++;
                                           }
                           }
            }

}[/code]

Mais uma vez obrigado pela ajuda, incluindo do Saudate com a forma de contagem dentro do XML e do TXT. 8)

OBS: Isso é uma versão alpha, ainda tem muitas melhorias, apenas fiz uma poc para validar os dados que precisava, agora vou refazer de um modo mais performático e vai mudar bastante, mas esse foi o Norte que pedi e que me ajudou muito.