Простой класс инструмента декомпрессии сжатия на молнии, написанный с использованием базового класса Java
Кода -копия выглядит следующим образом:
Пакет Sun.net.helper;
импортировать java.io.*;
импортировать java.util.logging.logger;
импортировать java.util.zip.*;
открытый класс Ziputil {
Private Final Static Logger logger = logger.getLogger (Ziputil.class.getName ());
Частный статический конечный буфер = 1024*10;
/**
* Сжатие указанного каталога в zip -файл с тем же именем, что и в каталоге, и настройте путь сжатия
* @param sourcefilepath
* @param zipfilepath укажите путь zip file
* @возвращаться
*/
Public Static Boolean Zip (String SourceFilePath, String ZipfilePath) {
логический результат = false;
File Source = новый файл (SourceFilePath);
if (! source.exists ()) {
logger.info (SourceFilePath+«не существует»);
результат возврата;
}
if (! source.isdirectory ()) {
logger.info (SourceFilePath+"не является каталогом");
результат возврата;
}
File zipfile = new File (ZipfilePath+"/"+source.getName ()+". Zip");
if (zipfile.exists ()) {
logger.info (zipfile.getName ()+"уже существует.");
результат возврата;
}еще{
if (! Zipfile.getParentFile (). существует ()) {
if (! Zipfile.getParentFile (). mkdirs ()) {
logger.info ("не может создать файл"+Zipfile.getName ());
результат возврата;
}
}
}
logger.info ("Создание zip -файла ...");
FileOutputStream dest = null;
Zipoutputstream out = null;
пытаться {
dest = new FileOutputStream (Zipfile);
CheckedOutputStream Checksum = new CheckEdOutputStream (dest, new adler32 ());
out = new ZipoutputStream (новый BufferedOutputStream (контрольная сумма));
out.setmethod (zipoutputstream.deflated);
сжатие (источник, out, source.getName ());
result = true;
} catch (filenotFoundException e) {
e.printstacktrace ();
} окончательно {
if (out! = null) {
пытаться {
out.closeentry ();
} catch (ioException e) {
e.printstacktrace ();
}
пытаться {
out.close ();
} catch (ioException e) {
e.printstacktrace ();
}
}
}
if (result) {
logger.info ("Dode.");
}еще{
logger.info ("Fail.");
}
результат возврата;
}
private static void compress (файл файла, zipoutputstream out, string mainfilename) {
if (file.isfile ()) {
FileInputStream fi = null;
BufferedInputStream Origin = NULL;
пытаться {
fi = new FileInputStream (file);
Origin = new BufferedInputStream (Fi, Buffer);
int index = file.getAbsolutePath (). Indexof (MainFileName);
String rentname = file.getAbsolutePath (). Substring (index);
System.out.println (rentname);
Zipentry intry = new Zipentry (rentname);
out.putnextentry (inting);
byte [] data = new Byte [Buffer];
int считать;
while ((count = origin.read (data, 0, buffer))! = -1) {
out.write (data, 0, count);
}
} catch (filenotFoundException e) {
e.printstacktrace ();
} catch (ioException e) {
e.printstacktrace ();
} окончательно {
if (Origin! = null) {
пытаться {
Origin.close ();
} catch (ioException e) {
e.printstacktrace ();
}
}
}
} else if (file.isdirectory ()) {
File [] fs = file.listfiles ();
if (fs! = null && fs.length> 0) {
для (файл f: fs) {
сжатие (F, Out, MainFileName);
}
}
}
}
/**
* Расшипьте файл ZIP в указанный каталог.
* @param Zipfile
* @param destpath
* @возвращаться
*/
Public Static Boolean Unzip (файл Zipfile, String destpath) {
логический результат = false;
if (! zipfile.exists ()) {
logger.info (zipfile.getName ()+«не существует»);
результат возврата;
}
File target = new File (destpath);
if (! target.exists ()) {
if (! target.mkdirs ()) {
logger.info ("не может создать файл"+target.getName ());
результат возврата;
}
}
String mainfilename = zipfile.getName (). Replication (". Zip", "");
File TargetFile = новый файл (destpath+"/"+mainfilename);
if (targetfile.exists ()) {
logger.info (targetfile.getName ()+«уже существует.»);
результат возврата;
}
Zipinputstream zis = null;
logger.info ("start unzip -файл ...");
пытаться {
FileInputStream fis = new FileInputStream (ZipFile);
CheckedInputStream Checksum = new RekedInputStream (FIS, New Adler32 ());
zis = new ZipinputStream (новый BufferedInputStream (контрольная сумма));
Вход на Zipentry;
while ((entry = zis.getnextentry ())! = null) {
int считать;
байтовые данные [] = новый байт [буфер];
String intryName = entry.getName ();
int index = rentname.indexof (mainfilename);
String newentryName = destpath+"/"+intrentname.substring (index);
System.out.println (NewentRyName);
File temp = new File (NewentRyName) .getParentFile ();
if (! temp.exists ()) {
if (! temp.mkdirs ()) {
бросить новый runtimeexception ("create file" +temp.getName () +"fail");
}
}
FileOutputStream fos = new FileOutputStream (NewentRyName);
BufferedOutputStream dest = new BufferedOutputStream (FOS, Buffer);
while ((count = zis.read (data, 0, buffer))! = -1) {
dest.write (данные, 0, count);
}
dest.flush ();
dest.close ();
}
result = true;
} catch (filenotFoundException e) {
e.printstacktrace ();
} catch (ioException e) {
e.printstacktrace ();
} окончательно {
if (zis! = null) {
пытаться {
zis.close ();
} catch (ioException e) {
e.printstacktrace ();
}
}
}
if (result) {
logger.info ("Dode.");
}еще{
logger.info ("Fail.");
}
результат возврата;
}
public static void main (string [] args) бросает ioException {
//Ziputil.zip("d:/apache-tomcat-7.0.30 "," d:/temp ");
File Zipfile = new File ("d: /temp/apache-tomcat-7.0.30.zip");
Ziputil.unzip (Zipfile, "d:/temp");
}
}
Еще один пример сжатия и декомпрессии, пожалуйста, обратитесь к двум инструментам.
Кода -копия выглядит следующим образом:
пакет com.lanp;
Импорт java.io.file;
импортировать java.io.fileinputstream;
Импорт java.io.fileOutputStream;
импортировать java.io.ioexception;
Импорт java.util.zip.zipentry;
Импорт java.util.zip.zipexception;
Импорт java.util.zip.zipfile;
импортировать java.util.zip.zipinputstream;
/**
* Разанипируйте сжатый файл ZIP в указанный каталог
*/
публичный финальный класс Ziptofile {
/**
* Размер кэша по умолчанию на 20480
*/
Приватный окончательный статический int file_buffer_size = 20480;
private ziptofile () {
}
/**
* Расшиппируйте сжатый файл ZIP указанного каталога в указанный каталог
* @param zipfilepathzip сжатый файл.
* @param zipfilenamezip сжатый файл Имя
* @param targetfiledirzip сжатый файл для извлечения
* @return Flag Boolean возвращаемое значение
*/
Public Static Boolean Unzip (String ZipfilePath, String Zipfilename, String TargetFiledir) {
логический флаг = false;
// 1.
Файл файла = null; // сжатый файл (с путем)
Zipfile Zipfile = null;
file = new File (ZipfilePath + "/" + Zipfilename);
System.out.println (">>>>>>> unzip file [" + ZipfilePath + "/" + Zipfilename + "] в каталог [" + targetfiledir + "] <<<<<<<");
if (false == file.exists ()) {
System.out.println (">>>>>>> сжатый файл [" + ZipfilePath + "/" + ZipfilEname + "] не существует <<<<<<<<");
вернуть ложь;
} else if (0 == file.length ()) {
System.out.println (">>>>>>> сжатый файл [" + ZipfilePath + "/" + Zipfilename + "] размер равен 0 и не требует декомпрессии <<<<<");
вернуть ложь;
} еще {
// 2.
byte [] buf = new Byte [file_buffer_size];
int Readsize = -1;
Zipinputstream zis = null;
FileOutputStream fos = null;
пытаться {
// Проверьте, является ли это файл ZIP
Zipfile = new Zipfile (файл);
zipfile.close ();
// Определите, существует ли целевой каталог.
File newdir = new File (TargetFileDir);
if (false == newdir.exists ()) {
newdir.mkdirs ();
newdir = null;
}
zis = new ZipinputStream (new FileInputStream (файл));
Zipentry Zipentry = zis.getNextEntry ();
// Запуск обработки файлов в сжатом пакете
while (null! = zipentry) {
String ZipentryName = Zipentry.getName (). Reply ('//', '/');
// Судите, является ли Zipentry каталог
if (zipentry.isdirectory ()) {
int indexNumber = ZipentryName.lastIndexof ('/');
File intryDirs = new File (TargetFiledIr + "/" + ZipentryName.substring (0, IndexNumber));
intryDirs.mkdirs ();
intryDirs = null;
} еще {
пытаться {
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 ();
бросить новое runtimeexception (e.getcause ());
} окончательно {
пытаться {
if (null! = fos) {
fos.close ();
}
} catch (ioException e) {
e.printstacktrace ();
бросить новое runtimeexception (e.getcause ());
}
}
}
Zipentry = zis.getNextEntry ();
}
flag = true;
} catch (zipexception e) {
e.printstacktrace ();
бросить новое runtimeexception (e.getcause ());
} catch (ioException e) {
e.printstacktrace ();
бросить новое runtimeexception (e.getcause ());
} окончательно {
пытаться {
if (null! = Zis) {
zis.close ();
}
if (null! = fos) {
fos.close ();
}
} catch (ioException e) {
e.printstacktrace ();
бросить новое runtimeexception (e.getcause ());
}
}
}
вернуть флаг;
}
/**
* Основной метод тестирования
*/
public static void main (string [] args) {
String zipfilepath = "c: // home";
String zipfilename = "lp20120301.zip";
String targetfiledir = "c: // home // lp20120301";
Boolean Flag = ziptoFile.unzip (ZipfilePath, ZipfileName, TargetFileDir);
if (flag) {
System.out.println (">>>>>>> успешно декомпрессат <<<<<<<<");
} еще {
System.out.println (">>>>>>> неудачная декомпрессия <<<<<<<");
}
}
}