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;
|
}
|
}
|