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)
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]
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.