come creare archivi zip java con un limite massimo di dimensioni del file

2

Ho bisogno di scrivere un algoritmo in java (per un'applicazione Android) per leggere una cartella contenente più cartelle e ognuna di quelle contenenti immagini e file audio, quindi la struttura è questa: mainDir/subfolders/myFile1.jpg

  • Deve essere in java, qualcosa come lo script perl non è un'opzione. Sarebbe preferibilmente per l'archivio compresso al fine di spremere quanti più file possibili prima di spedire lo zip. Solo un normale zip (senza barattolo).

Il mio problema è che ho bisogno di limitare la dimensione dell'archivio a 16mb e in fase di runtime, creare tutti gli archivi necessari per contenere tutti i miei file dalla mia cartella mainDir principale. Ho provato diversi esempi dalla rete, ho letto la documentazione di java, ma non riesco a capire e mettere tutto insieme nel modo in cui ne ho bisogno.

Qualcuno l'ha già fatto o ha un link o un esempio per me? Ho risolto la lettura dei file con un metodo ricorsivo ma non riesco a capire la logica per la creazione di zip.

EDIT: FileNotFoundException (nessun file o directory simile) questo era il mio post iniziale su Stack Overflow. Ho una risposta, ma non posso impostare la dimensione di ZipEntry e la logica non funziona e anche quando estrai i miei file dallo zip ottengo l'errore compression method not supported .

    
posta androidu 19.06.2012 - 17:57
fonte

2 risposte

4

Il limite di dimensione (16 MB o qualsiasi altra cosa) non impone di avere la dimensione dell'archivio il più vicino possibile.

Supponendo di poter creare archivi di dimensioni più ridotte, ecco la soluzione "prima iterazione": semplice, ma che soddisfa i tuoi requisiti: basta comprimere ogni file in un archivio separato.

  1. myFile1 - > %codice%
  2. archive1.zip - > %codice%
  3. etc

Ora, se lo vuoi un po 'meno stupido, usa la somma della dimensione attuale dell'archivio ( Deflater.getBytesWritten () ) e prossimo file non compresso dimensioni per decidere se è il momento di passare alla creazione di nuovi archivio.

  1. myFile2 - > %codice%
  2. dimensione di archive2.zip più myFile1 entro il limite - > aggiungi archive1.zip a archive1.zip
  3. la dimensione di myFile2 più myFile2 supera il limite - > aggiungi archive1 al nuovo zip, archive1.zip
    Sì, c'è la possibilità che aggiungendo compresso myFile3 all'archivio1 rimanga entro il limite, ma perché preoccuparsi?
  4. etc
risposta data 19.06.2012 - 19:24
fonte
2

Stai usando Java 7? Se è così allora ha il supporto nativo per archivi Zip nel nuove API NIO.2

The zip file system provider introduced in the Java SE 7 release is an implementation of a custom file system provider. The zip file system provider treats a zip or JAR file as a file system and provides the ability to manipulate the contents of the file. The zip file system provider creates multiple file systems — one file system for each zip or JAR file.

The demo/nio/zipfs/src.zip file in your Java SE 7 installation contains the source code for the zip file system provider. It also contains the Demo.java class that shows how to use the zip file system provider...

You can use the factory methods of the java.nio.file.FileSystems class to create a new zip file system or to obtain a reference to an existing zip file system...

    
risposta data 19.06.2012 - 18:35
fonte

Leggi altre domande sui tag