Une simple classe d'outils de décompression de compression zip écrite à l'aide de la classe Java Basic
La copie de code est la suivante:
Package Sun.net.helper;
importer java.io. *;
import java.util.logging.logger;
import java.util.zip. *;
classe publique Ziputil {
Logger statique final privé = logger.getLogger (ziputil.class.getName ());
tampon int statique final statique = 1024 * 10;
/ **
* Compressez le répertoire spécifié dans un fichier zip avec le même nom que le répertoire et personnalisez le chemin de compression
* @Param SourceFilePath Target File Chemin de fichier
* @param zipfilepath Spécifiez le chemin du fichier zip
* @retour
* /
Public Static Boolean Zip (String SourceFilePath, String ZipFilePath) {
Résultat booléen = false;
Fichier source = nouveau fichier (sourceFilePath);
if (! Source.exists ()) {
Logger.info (sourceFilePath + "n'existe pas.");
Résultat de retour;
}
if (! source.isdirectory ()) {
Logger.info (SourceFilePath + "n'est pas un répertoire.");
Résultat de retour;
}
File zipfile = nouveau fichier (zipfilepath + "/" + source.getname () + ". Zip");
if (zipfile.exists ()) {
Logger.info (zipfile.getName () + "est déjà existant.");
Résultat de retour;
}autre{
if (! zipFile.getParentFile (). existant ()) {
if (! zipfile.getParentFile (). MkDirs ()) {
logger.info ("ne peut pas créer un fichier" + zipfile.getName ());
Résultat de retour;
}
}
}
Logger.info ("Création de fichiers zip ...");
FileoutputStream dest = null;
ZipOutputStream out = null;
essayer {
dest = new FileOutputStream (ZipFile);
CheckedOutputStream Checksum = new CheckedOutputStream (dest, new Adler32 ());
out = new ZipOutputStream (nouveau tampondoutputStream (somme de contrôle));
out.setMethod (zipOutputStream.Deflated);
compress (source, out, source.getName ());
résultat = true;
} catch (filenotfoundException e) {
e.printStackTrace ();
} enfin {
if (out! = null) {
essayer {
out.closeEntry ();
} catch (ioexception e) {
e.printStackTrace ();
}
essayer {
out.close ();
} catch (ioexception e) {
e.printStackTrace ();
}
}
}
if (résultat) {
Logger.info ("Done.");
}autre{
Logger.info ("Fail.");
}
Résultat de retour;
}
Compressation statique privée (fichier de fichier, zipOutputStream out, String MainFileName) {
if (file.isfile ()) {
FileInputStream fi = null;
BufferedInputStream Origin = NULL;
essayer {
fi = new FileInputStream (fichier);
Origin = nouveau BufferedInputStream (Fi, tampon);
int index = file.getabsolutepath (). indexof (mainFileName);
String entryName = file.getAbsolutepath (). Substring (index);
System.out.println (EntryName);
Zipentry Entry = new Zipentry (entryName);
out.putNexTentry (entrée);
octet [] data = nouveau octet [tampon];
int count;
while ((count = origine.read (data, 0, tampon))! = -1) {
out.write (données, 0, comte);
}
} catch (filenotfoundException e) {
e.printStackTrace ();
} catch (ioexception e) {
e.printStackTrace ();
} enfin {
if (origine! = null) {
essayer {
origine.close ();
} catch (ioexception e) {
e.printStackTrace ();
}
}
}
} else if (file.isdirectory ()) {
File [] fs = file.listFiles ();
if (fs! = null && fs.length> 0) {
pour (fichier f: fs) {
compress (f, out, mainfilename);
}
}
}
}
/ **
* Décompressez le fichier zip dans le répertoire spécifié.
* @param zipfile
* @param destpath
* @retour
* /
public static boolean unzip (fichier zipfile, string destpath) {
Résultat booléen = false;
if (! zipfile.exists ()) {
Logger.info (zipfile.getName () + "n'existe pas.");
Résultat de retour;
}
File cible = nouveau fichier (destpath);
if (! Target.exists ()) {
if (! Target.mkDirs ()) {
logger.info ("ne peut pas créer un fichier" + cible.getName ());
Résultat de retour;
}
}
String MainFileName = zipFile.getName (). Remplace (". Zip", "");
File TargetFile = nouveau fichier (destpath + "/" + mainfilename);
if (targetfile.exists ()) {
Logger.info (TargetFile.getName () + "Déjà.");
Résultat de retour;
}
ZipinputStream zis = null;
Logger.info ("Démarrer le fichier unzip ...");
essayer {
FileInputStream fis = new FileInputStream (zipfile);
CheckedInputStream Checksum = new checkedInputStream (FIS, new Adler32 ());
zis = new ZipinputStream (new BufferedInputStream (vérification));
Entrée de ziperie;
while ((entry = zis.getNexTENTRY ())! = null) {
int count;
Données d'octets [] = nouveau octet [tampon];
String entryName = entry.getName ();
int index = entryName.Indexof (MainFileName);
String NewEntryName = destpath + "/" + entryName.Substring (index);
System.out.println (NewEntryName);
File temp = new File (newentryName) .GetParentFile ();
if (! temp.exists ()) {
if (! temp.mkDirs ()) {
lancer un nouveau RuntimeException ("Créer un fichier" + temp.getName () + "échec");
}
}
FileOutputStream fos = new FileOutputStream (NewEntryName);
BufferedOutputStream dest = new BufferedOutputStream (FOS, Buffer);
while ((count = zis.read (data, 0, tampon))! = -1) {
dest.write (données, 0, comte);
}
dest.flush ();
dest.close ();
}
résultat = true;
} catch (filenotfoundException e) {
e.printStackTrace ();
} catch (ioexception e) {
e.printStackTrace ();
} enfin {
if (zis! = null) {
essayer {
zis.close ();
} catch (ioexception e) {
e.printStackTrace ();
}
}
}
if (résultat) {
Logger.info ("Done.");
}autre{
Logger.info ("Fail.");
}
Résultat de retour;
}
public static void main (String [] args) lance ioException {
//Ziputil.zip("d:/apache-tomcat-7.0.30 "," d: / temp ");
File zipfile = nouveau fichier ("d: /temp/apache-tomcat-7.0.30.zip");
Ziputil.unzip (zipfile, "d: / temp");
}
}
Un autre exemple de compression et de décompression, veuillez vous référer aux deux outils.
La copie de code est la suivante:
Package Com.Lanp;
Importer java.io.file;
import java.io.fileInputStream;
Importer java.io.fileOutputStream;
Importer java.io.ioException;
Importer java.util.zip.zipentry;
Importer java.util.zip.zipException;
import java.util.zip.zipfile;
Importer java.util.zip.zipinputStream;
/ **
* Décompressez le fichier compressé ZIP dans le répertoire spécifié
* /
classe finale publique ziptofile {
/ **
* La taille du cache est par défaut à 20480
* /
private final static int file_buffer_size = 20480;
ziptofile privé () {
}
/ **
* Décompressez le fichier compressé zip du répertoire spécifié dans le répertoire spécifié
* @Param ZipFilePathZip Compressez le chemin du fichier compressé
* @param zipfilenamezip nom de fichier compressé
* @param TargetFiledirzip Compresser le fichier à extraire
* @return drapeau booléen de retour valeur de retour
* /
public static boolean unzip (string zipfilepath, string zipfilename, string targetfiledir) {
booléen drapeau = false;
// 1.
Fichier fichier = null; // fichier compressé (avec chemin)
Zipfile zipfile = null;
file = new File (zipFilePath + "/" + zipFileName);
System.out.println (">>>>>>>> dézip le fichier [" + zipfilepath + "/" + zipfilename + "] au répertoire [" + TargetFiledir + "] <<<<<<<");
if (false == file.exists ()) {
System.out.println (">>>>>>>> Fichier compressé [" + ZipFilePath + "/" + ZipFileName + "] n'existe pas <<<<<<<<");
retourne false;
} else if (0 == file.length ()) {
System.out.println (">>>>>>>> Fichier compressé [" + ZipFilePath + "/" + ZipFileName + "] La taille est 0 et ne nécessite pas de décompression <<<<<<<" ");
retourne false;
} autre {
// 2.
Byte [] buf = new Byte [file_buffer_size];
int licsize = -1;
ZipinputStream zis = null;
FileoutputStream fos = null;
essayer {
// Vérifiez s'il s'agit d'un fichier zip
zipFile = new ZipFile (fichier);
zipfile.close ();
// Déterminez si le répertoire cible existe.
Fichier newdir = nouveau fichier (TargetFiledir);
if (false == newdir.exists ()) {
newdir.mkDirs ();
newdir = null;
}
zis = new ZipinputStream (new FileInputStream (fichier));
Zipentry zipentry = zis.getNextStry ();
// commence le traitement des fichiers dans le package compressé
while (null! = zipentry) {
String ZipentryName = zipentry.getName (). Remplace ('//', '/');
// jugez si Zipentry est un répertoire.
if (zipentry.isdirectory ()) {
int indexNumber = zipentryName.LastIndexof ('/');
File EntryDirs = nouveau fichier (TargetFiledir + "/" + ZipentryName.Substring (0, indexNumber));
entryDirs.mkDirs ();
entryDirs = null;
} autre {
essayer {
fos = new FileOutputStream (TargetFiledir + "/" + ZipentryName);
while ((readSize = zis.read (buf, 0, file_buffer_size))! = -1) {
fos.write (buf, 0, readSize);
}
} catch (exception e) {
e.printStackTrace ();
lancer un nouveau RuntimeException (e.getCause ());
} enfin {
essayer {
if (null! = fos) {
fos.close ();
}
} catch (ioexception e) {
e.printStackTrace ();
lancer un nouveau RuntimeException (e.getCause ());
}
}
}
zipentry = zis.getNexTENTRY ();
}
Flag = true;
} catch (zipexception e) {
e.printStackTrace ();
lancer un nouveau RuntimeException (e.getCause ());
} catch (ioexception e) {
e.printStackTrace ();
lancer un nouveau RuntimeException (e.getCause ());
} enfin {
essayer {
if (null! = zis) {
zis.close ();
}
if (null! = fos) {
fos.close ();
}
} catch (ioexception e) {
e.printStackTrace ();
lancer un nouveau RuntimeException (e.getCause ());
}
}
}
drapeau de retour;
}
/ **
* Méthode principale pour tester
* /
public static void main (String [] args) {
String zipFilePath = "c: // home";
String zipFileName = "lp20120301.zip";
String TargetFileDir = "C: // Home // LP20120301";
booléen drapeau = ziptofile.unzip (zipfilepath, zipfilename, targetfiledir);
if (Flag) {
System.out.println (">>>>>>>> Décompressez avec succès <<<<<<<<");
} autre {
System.out.println (">>>>>>> Décompression a échoué <<<<<<" ");
}
}
}