Dernièrement, j’ai cherché une solution pour pouvoir découper une grosse archive afin de la transférer plus facilement via un web service, le tout en Java :) Je suis tombé sur Zip4j, une librairie open source et gratuite (licence Apache 2.0) qui permet pas mal de petites choses sympathiques : compression et décompression au format zip, ajout et extraction de fichiers au cas par cas, chiffrement et sécurisation de l’archive par mot de passe, etc.
Ci-après, un petit exemple de code pour créer une archive en plusieurs parties :)
L’idée est de prendre quatre fichiers (deux documents word et deux pdfs) et de les compresser dans une archive zip. Si la taille de l’archive dépasse les 100ko, elle sera découpée en autant de parties que nécessaires…
/** * @param args * @throws ZipException */ public static void main(String[] args) throws ZipException { // Create the split archive File dataFolder = new File("data"); // the folder where files to compress are. ZipFile zip = new ZipFile("output/archive.zip"); // the output archive ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // standard compression method parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // standard compression level parameters.setIncludeRootFolder(false); // true if you want data folder to be included in the archive long ARCHIVE_MAX_SIZE = 100000; // 100ko zip.createZipFileFromFolder(dataFolder, parameters, true, ARCHIVE_MAX_SIZE); // Test the archive System.out.println("Is the generated archive valid: " + zip.isValidZipFile()); System.out.println("Is the generated archive a split one: " + zip.isSplitArchive()); // Unzip the archive zip.extractAll("output"); }
C’est assez facile, non? :) Et le résultat :
Pour décompresser une archive découpée en plusieurs parties, il suffit d’instancier un objet ZipFile en spécifiant le chemin du fragment ayant l’extension .zip. Zip4j se chargera de trouver les autres fragments.
Pour en savoir plus, le site officiel est : http://www.lingala.net/zip4j/ . Il n’y a pas de Javadoc complète mais les sources sont bien sûres disponibles au téléchargement et les méthodes disposent de commentaires. Il y a aussi un forum disponible.
Téléchargez le projet de démo :)