Zip perda de byte [Resolvido]

3 respostas
casconi

Estou a editar ficheiros ODT e como processo faço unzip do ficheiro, edito o xml como pretendo e volto a fazer zip.

Unzip e editar o que quero está tudo ok, mas quando faço zip perco bytes, se fizer manualmente está tudo ok, mas com o código perco, alguem pode dar uma ajuda.

Exemplo, o ficheiro original tem 69427 bytes, o zip fica com 67379 bytes. (não fazendo nenhum alteração, so mesmo unzip -> zip)

public static final void zipDirectory( File directoria, File zip ) throws IOException {
    ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( zip ) );
    zip( directoria, directoria, zos );
      zos.close();
  }
 
  private static final void zip(File directoria, File base, ZipOutputStream zos) throws IOException {
    File[] files = directory.listFiles();
    byte[] buffer = new byte[TAMANHO_FICH_ORIGINAL];
    int read = 0;
    for (int i = 0, n = files.length; i < n; i++) {
      if (files[i].isDirectory()) {
        zip(files[i], base, zos);
      } else {
        FileInputStream in = new FileInputStream(files[i]);
        ZipEntry entry = new ZipEntry(files[i].getPath().substring(base.getPath().length() + 1));
        zos.putNextEntry(entry);
        while (-1 != (read = in.read(buffer))) {
          zos.write(buffer, 0, read);
        }
        in.close();
      }
    }
  }

3 Respostas

peczenyj

Eu sempre segui esta dica:

http://www.devx.com/tips/Tip/14049

casconi

peczenyj:
Eu sempre segui esta dica:

http://www.devx.com/tips/Tip/14049

Eu também me guiei por aqui :), esse código coloca a pasta dentro do ficheiro, mas eu só quero os conteudos (que foi o que fiz), mas o método de fazer zip é igual, só que o resultado final é sempre menor do que é suposto :frowning: .

Para o exemplo de ficheiros ODT. Quando faço o zip e vou abrir o ficheiro, tudo o que seja texto mostra correcto, agora se tiver imagens já não apresenta imagens (mostra erro no local dela). Se fizer o processo à mão, já mostra tudo correcto. :?

casconi

Apos dedicar algum a confirmar todas as pastas, lá encontrei a solução :smiley: .

A conversão está correcta, o problema é que pastas em branco ele não coloca, logo o ficheiro final fica “corrupto”.

Agora que já criei um método para tratar este problema já está tudo ok :smiley:

Criado 31 de janeiro de 2009
Ultima resposta 1 de fev. de 2009
Respostas 3
Participantes 2