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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
// l'idée ici de cette opération est d'extraire uniquement du fichier jar le répertoire suivant :
// requetesSQL/ et scriptsShell/
public void dezipperUnePartieDuFichierJar(String e_nomFichierJar, String[] e_RepertoiresAExtraire) throws FileNotFoundException, IOException {
// Déclaration des varibales locales
FileInputStream l_fileInputStream = null;
BufferedInputStream l_bufferedInputStream = null;
ZipInputStream l_zipInputStream = null;
ZipEntry l_zipEntry = null;
File l_fichier = null;
OutputStream l_outputStream = null;
File l_fichierJar = null;
File l_repertoire = null;
String l_nomRepertoire = null;
String l_extension = null;
int l_nombreDOctetesLus = 0;
int l_positionPoint = 0;
char l_point = '.';
boolean l_drapeauSuppressionRepertoire = false;
boolean l_drapeauCreationRepertoire = false;
boolean l_drapeauSuiteTraitement = false;
try {
l_positionPoint = e_nomFichierJar.indexOf(l_point);
l_nomRepertoire = e_nomFichierJar.substring(0, l_positionPoint);
System.out.println("Le nom long du fichier jar est : " + e_nomFichierJar);
System.out.println("Le nom du répertoire est : " + l_nomRepertoire);
l_fichierJar = new File(e_nomFichierJar);
l_repertoire = new File(l_nomRepertoire);
// Si le répertoire existe le supprimer
if (l_repertoire.exists()) {
l_drapeauSuppressionRepertoire = suppressionDUnRepertoire(l_repertoire);
if (l_drapeauSuppressionRepertoire == true) {
System.out.println("le répertoire " + l_nomRepertoire + " et tout son contenu a bien été supprimer");
} else {
System.out.println("le répertoire " + l_nomRepertoire + " n'a pas pu être supprimé");
}
}
// Petit temps d'attente, pour laisser le temps au processus de vraiment supprimer le répertoire
// Sinon le processus n'arrive pas a recréer le répertoire
Thread.sleep(3000);
// Puis le recréer
l_drapeauCreationRepertoire = l_repertoire.mkdir();
if (l_drapeauCreationRepertoire == true) {
System.out.println("le répertoire " + l_nomRepertoire + " a été recrée à vide");
} else {
System.out.println("le répertoire " + l_nomRepertoire + " n'a pas pu être recrée à vide");
}
// création de la ZipInputStream qui va servir à lire les données du fichier jar
l_fileInputStream = new FileInputStream(l_fichierJar.getCanonicalFile());
l_bufferedInputStream = new BufferedInputStream(l_fileInputStream);
l_zipInputStream = new ZipInputStream(l_bufferedInputStream);
// extractions des entrées du fichiers zip (c'est à dire le contenu du fichier jar)
while ((l_zipEntry = l_zipInputStream.getNextEntry()) != null) {
// Pour chaque entrée, on crée un fichier
// dans le répertoire de sortie "l_repertoire"
l_fichier = new File(l_repertoire.getCanonicalPath(), l_zipEntry.getName());
// System.out.println("Le zip entry est : " + l_zipEntry.getName());
// Si l'entrée est un répertoire,
// on le crée dans le répertoire de sortie
// et on passe à l'entrée suivante (continue)
if (l_zipEntry.isDirectory()) {
if (l_zipEntry.getName().equals(e_RepertoiresAExtraire[0]) || l_zipEntry.getName().equals(e_RepertoiresAExtraire[1])) {
l_fichier.mkdirs();
l_drapeauSuiteTraitement = true;
} else {
l_drapeauSuiteTraitement = false;
}
// on ne lit pas les instructions suivantes, on passe à l'itération de boucle suivante
continue;
}
l_positionPoint = l_zipEntry.getName().indexOf(l_point);
l_extension = l_zipEntry.getName().substring(l_positionPoint + 1);
// La condition ici est de crée des fichiers Uniquement s'il font partie du répertoire
// requetesSQL/ et scriptsShell/ (condition l_drapeauSuiteTraitement == true)
// et le ficier ne doit pas avoir l'extension .class
if (l_drapeauSuiteTraitement == true && !"class".equals(l_extension)) {
// L'entrée est un fichier, on crée une OutputStream
// pour écrire le contenu du nouveau fichier
l_fichier.getParentFile().mkdirs();
l_outputStream = new BufferedOutputStream(new FileOutputStream(l_fichier));
// On écrit le contenu du nouveau fichier
// qu'on lit à partir de la ZipInputStream
// au moyen d'un buffer (byte[])
try {
try {
final byte[] l_tableauDeBytes = new byte[8192];
l_nombreDOctetesLus = 0;
while (-1 != (l_nombreDOctetesLus = l_zipInputStream.read(l_tableauDeBytes))) {
l_outputStream.write(l_tableauDeBytes, 0, l_nombreDOctetesLus);
}
} finally {
l_outputStream.close();
}
} catch (final IOException ioe) {
// en cas d'erreur on efface le fichier
l_fichier.delete();
throw ioe;
}
}
}
} catch (InterruptedException e) {
e.getStackTrace();
} finally {
// fermeture de la ZipInputStream
l_zipInputStream.close();
}
} |
Partager