1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
package librairie;
import java.io.*;
import java.util.*;
import java.util.zip.*;
import java.util.Enumeration;
import java.text.*;
import sun.text.Normalizer;
/**
* Classe de création d'une archive Zip
* à partir des fichiers du répertoire courant.
*
* D'après un exemple de la documentation officielle Java Sun
* http://java.sun.com/developer/technicalArticles/Programming/compression/
*
* Author: Hugo ETIEVANT
*/
public class Zip {
/**
* Taille générique du tampon en lecture et écriture
*/
static final int BUFFER = 2048;
//public static String unAccent(String s) {
// String temp = Normalizer.normalize(s, Normalizer.DECOMP, 0);
// return temp.replaceAll("[^\\p{ASCII}]","");
//}
/**
* Programme principal.
*/
public static String main ( String texte) {
String fichierZip = "/tmp/archive.zip";
String file_a_archiver = "/tmp/sauvagarde.sql";
/*************
* Compression
*************/
try {
//création du fichier
ObjectOutputStream fileout = new ObjectOutputStream (new FileOutputStream(file_a_archiver));
fileout.writeObject(texte);
fileout.close();
// création d'un flux d'écriture sur fichier
FileOutputStream dest = new FileOutputStream(fichierZip);
// calcul du checksum : Adler32 (plus rapide) ou CRC32
CheckedOutputStream checksum = new CheckedOutputStream(dest, new Adler32());
// création d'un buffer d'écriture
BufferedOutputStream buff = new BufferedOutputStream(checksum);
// création d'un flux d'écriture Zip
ZipOutputStream out = new ZipOutputStream(buff);
// spécification de la méthode de compression
out.setMethod(ZipOutputStream.DEFLATED);
// spécifier la qualité de la compression 0..9
out.setLevel(Deflater.BEST_COMPRESSION);
// buffer temporaire des données à écrire dans le flux de sortie
byte data[] = new byte[BUFFER];
// création d'un flux de lecture
FileInputStream fi = new FileInputStream("/tmp/sauvagarde.sql");
// création d'un tampon de lecture sur ce flux
BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
// création d'une entrée Zip pour ce fichier
//ZipEntry entry = new ZipEntry(unAccent("archive.sql"));
ZipEntry entry = new ZipEntry("archive.sql");
// ajout de cette entrée dans le flux d'écriture de l'archive Zip
out.putNextEntry(entry);
// écriture du fichier par paquet de BUFFER octets
// dans le flux d'écriture
int count;
while((count = buffi.read(data, 0, BUFFER)) != -1)
{out.write(data, 0, count);}
// Close the current entry
out.closeEntry();
// fermeture du flux de lecture
buffi.close();
// fermeture du flux d'écriture
out.close();
buff.close();
checksum.close();
dest.close();
//System.out.println("checksum: " + checksum.getChecksum().getValue());
// traitement de toute exception
} catch(Exception e) {e.printStackTrace();}
try{
File file = new File(file_a_archiver);
if(file.exists()){file.delete();}
file = null;
}catch (Exception e) {}
return(fichierZip);
}
} |
Partager