package com.megatim.module.compression.impl; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import com.megatim.module.compression.ifaces.CompressionFace; /** * Classe implementant l'algorithme GZLIB * * @author derteuffel * */ public class JavaZipGZLIBImpl implements CompressionFace { // Zip file public File zipFile(File fichierAZipper) throws IOException { // TODO Auto-generated method stub String sourceFile = fichierAZipper.getAbsolutePath(); System.out.println(sourceFile); // initialisation du fichier zipper avec retrai de l'extencion FileOutputStream fos = new FileOutputStream(removeExtension(sourceFile) + ".zip"); ZipOutputStream zipOut = new ZipOutputStream(fos); File fileToZip = new File(sourceFile); FileInputStream fis = new FileInputStream(fileToZip); ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); zipOut.putNextEntry(zipEntry); byte[] bytes = new byte[1024]; int length; while ((length = fis.read(bytes)) >= 0) { zipOut.write(bytes, 0, length); } zipOut.close(); fis.close(); fos.close(); System.out.println("Zippage terminer"); return fileToZip; } public File zipFile(File fichierAZipper, File repertoireDestination) throws IOException { return null; } // Zip directory public File zipRepository(File repertoireAZipper) throws IOException { // TODO Auto-generated method stub // Charger le chemin du repertoir a zipper String sourceFile = repertoireAZipper.getAbsolutePath(); // initialisation du nom du repertoir zipper FileOutputStream fos = new FileOutputStream(sourceFile + ".zip"); ZipOutputStream zipOut = new ZipOutputStream(fos); File fileToZip = new File(sourceFile); zipFile(fileToZip, fileToZip.getName(), zipOut); zipOut.close(); fos.close(); return fileToZip; } public File zipRepository(File repertoireAZipper, File repertoireDestination) throws IOException { return null; } // Dezipper un fichier zipper public void unZipFile(File fichierZipper, File repertoireSorti) throws IOException { // TODO Auto-generated method stub //Initialisation du chemin du fichier zipper a dezipper String fileZip = fichierZipper.getAbsolutePath(); // Initialisation du chemin destination du fichier zipper a dezipper File destDir = new File(repertoireSorti.getAbsolutePath()); if (destDir.mkdirs()) { System.out.println("Repertoi de sorti creer"); } else { System.out.println("Repertoir de sorti existant"); } byte[] buffer = new byte[1024]; ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip)); ZipEntry zipEntry = zis.getNextEntry(); while (zipEntry != null) { File newFile = newFile(destDir, zipEntry); // Test si le fichier contenu est un repertoir ou un fichier if (zipEntry.isDirectory()) { if (!newFile.isDirectory() && !newFile.mkdirs()) { throw new IOException("Failed to create directory " + newFile); } } else { // fix for Windows-created archives File parent = newFile.getParentFile(); if (!parent.isDirectory() && !parent.mkdirs()) { throw new IOException("Failed to create directory " + parent); } // write file content FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); } zipEntry = zis.getNextEntry(); } zis.closeEntry(); zis.close(); } // Dezipper un repertoir public void unZipRepository(File repertoireZipper, File repertoireSorti) throws IOException { // TODO Auto-generated method stub //Initialisation du chemin du fichier zipper a dezipper String fileZip = repertoireZipper.getAbsolutePath(); // Initialisation du chemin destination du fichier zipper a dezipper File destDir = new File(repertoireSorti.getAbsolutePath()); if (destDir.mkdirs()) { System.out.println("Repertoi de sorti creer"); } else { System.out.println("Repertoir de sorti existant"); } byte[] buffer = new byte[1024]; ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip)); ZipEntry zipEntry = zis.getNextEntry(); while (zipEntry != null) { File newFile = newFile(destDir, zipEntry); // Test si le fichier contenu est un repertoir ou un fichier if (zipEntry.isDirectory()) { if (!newFile.isDirectory() && !newFile.mkdirs()) { throw new IOException("Failed to create directory " + newFile); } } else { // fix for Windows-created archives File parent = newFile.getParentFile(); if (!parent.isDirectory() && !parent.mkdirs()) { throw new IOException("Failed to create directory " + parent); } // write file content FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); } zipEntry = zis.getNextEntry(); } zis.closeEntry(); zis.close(); } public void addFile(File fichier, File zipFile) throws Exception { // TODO Auto-generated method stub } // Add repository to existed zip file public void addRepository(File repository, File zipFile) throws Exception { // TODO Auto-generated method stub } // Zip file with password public File zipFile(File fichierAZipper, String password) throws Exception { // TODO Auto-generated method stub return null; } // Zip directory with passwor public File zipRepository(File repertoireAZipper, String password) throws Exception { // TODO Auto-generated method stub return null; } // dezippage d'un fichier zipper public void unZipFile(File fichierZipper, File repertoireSorti, String password) throws Exception { // TODO Auto-generated method stub } // Dezipper un repertoire public void unZipRepository(File repertoireZipper, File repertoireSorti, String password) throws Exception { // TODO Auto-generated method stub } public void addFile(File fichier, File zipFile, String password) throws Exception { // TODO Auto-generated method stub } public void addRepository(File repository, File zipFile, String password) throws Exception { // TODO Auto-generated method stub } // Remove extension before zip file public static String removeExtension(String s) { String separator = System.getProperty("file.separator"); String filename; // Remove the path upto the filename. /* * int lastSeparatorIndex = s.lastIndexOf(separator); if (lastSeparatorIndex == * -1) { filename = s; } else { filename = s.substring(lastSeparatorIndex + 1); * } */ // Remove the extension. int extensionIndex = s.lastIndexOf("."); if (extensionIndex == -1) { return s; } return s.substring(0, extensionIndex); } // create directory and check if there are many contained files private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { if (fileToZip.isHidden()) { return; } if (fileToZip.isDirectory()) { if (fileName.endsWith("/")) { zipOut.putNextEntry(new ZipEntry(fileName)); zipOut.closeEntry(); } else { zipOut.putNextEntry(new ZipEntry(fileName + "/")); zipOut.closeEntry(); } File[] children = fileToZip.listFiles(); for (File childFile : children) { zipFile(childFile, fileName + "/" + childFile.getName(), zipOut); } return; } FileInputStream fis = new FileInputStream(fileToZip); ZipEntry zipEntry = new ZipEntry(fileName); zipOut.putNextEntry(zipEntry); byte[] bytes = new byte[1024]; int length; while ((length = fis.read(bytes)) >= 0) { zipOut.write(bytes, 0, length); } fis.close(); } // Create new file after unzip public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException { File destFile = new File(destinationDir, zipEntry.getName()); String destDirPath = destinationDir.getCanonicalPath(); String destFilePath = destFile.getCanonicalPath(); if (!destFilePath.startsWith(destDirPath + File.separator)) { throw new IOException("Entry is outside of the target dir: " + zipEntry.getName()); } return destFile; } public File zipFile(File fichierAZipper,File repertoireDestination, String password) throws IOException { return null; } }