فئة بسيطة من أدوات إلغاء ضغط ضغط مضغوط مضغوطة مكتوبة باستخدام فئة Java Basic
نسخة الكود كما يلي:
حزمة sun.net.helper ؛
استيراد java.io.*؛
استيراد java.util.logging.logger ؛
استيراد java.util.zip.*؛
الفئة العامة Ziputil {
logger static static النهائي الخاص = logger.getLogger (ziputil.class.getName ()) ؛
static Final Final Buffer = 1024*10 ؛
/**
* اضغط على الدليل المحدد إلى ملف مضغوط بنفس اسم الدليل ، وقم بتخصيص مسار الضغط
* param sourcefilepath مسار الملف الهدف
* param zipfilepath حدد مسار ملف zip
* @يعود
*/
ZIP الثابتة العامة (String SourceFilePath ، String ZipfilePath) {
نتيجة منطقية = خطأ ؛
مصدر الملف = ملف جديد (SourceFilePath) ؛
if (! source.exists ()) {
logger.info (sourceFilePath+"غير موجود.") ؛
نتيجة العودة
}
if (! source.isdirectory ()) {
logger.info (sourceFilePath+"ليس دليلًا.") ؛
نتيجة العودة
}
ملف zipfile = ملف جديد (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 = checkedOutputStream جديد (Dest ، New Adler32 ()) ؛
Out = new ZipoutputStream (جديد bufferedoutputstream (checksum)) ؛
Out.setMethod (zipoutputstream.deflated) ؛
ضغط (المصدر ، خارج ، source.getName ()) ؛
النتيجة = صواب ؛
} catch (fileNotfoundException e) {
E.PrintStackTrace () ؛
} أخيراً {
if (out! = null) {
يحاول {
out.closeentry () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
يحاول {
out.close () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
}
}
إذا (النتيجة) {
logger.info ("تم.") ؛
}آخر{
logger.info ("فشل.") ؛
}
نتيجة العودة
}
ضغط الفراغ الثابت الخاص (ملف الملف ، ZipoutputStream Out ، سلسلة MainFilename) {
if (file.isfile ()) {
fileInputStream fi = null ؛
bufferedInputStream Origin = NULL ؛
يحاول {
fi = جديد fileInputStream (ملف) ؛
الأصل = جديد bufferedInputStream (fi ، buffer) ؛
int index = file.getabsolutepath (). indexof (mainfilename) ؛
string entryName = file.getabsolutepath (). substring (index) ؛
System.out.println (enterName) ؛
Zipentry Entry = zipentry new (enterName) ؛
out.putNextentry (الدخول) ؛
byte [] data = new byte [buffer] ؛
عدد int
بينما ((count = Origin.Read (Data ، 0 ، Buffer))! = -1) {
out.write (البيانات ، 0 ، العد) ؛
}
} catch (fileNotfoundException e) {
E.PrintStackTrace () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
} أخيراً {
if (Origin! = null) {
يحاول {
Origin.Close () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
}
}
} آخر إذا (file.isdirectory ()) {
file [] fs = file.listfiles () ؛
if (fs! = null && fs.length> 0) {
لـ (file f: fs) {
ضغط (F ، Out ، mainfilename) ؛
}
}
}
}
/**
* يجب أن يكون ملف zip إلى الدليل المحدد.
* param zipfile
* param destpath
* @يعود
*/
Public Static Boolean Unzip (ملف zipfile ، سلسلة destpath) {
نتيجة منطقية = خطأ ؛
if (! zipfile.exists ()) {
logger.info (zipfile.getName ()+"غير موجود.") ؛
نتيجة العودة
}
ملف الملف = ملف جديد (DESTPTH) ؛
if (! target.exists ()) {
if (! target.mkdirs ()) {
logger.info ("لا يمكن إنشاء ملف"+target.getName ()) ؛
نتيجة العودة
}
}
سلسلة mainfilename = zipfile.getName (). استبدال (". zip" ، "") ؛
File TargetFile = ملف جديد (DestPath+"/"+MainFilename) ؛
if (targetfile.exists ()) {
logger.info (targetfile.getName ()+"موجودة بالفعل.") ؛
نتيجة العودة
}
zipinputstream zis = null ؛
logger.info ("ابدأ ملف unzip ...") ؛
يحاول {
fileInputStream fis = new FileInputStream (zipfile) ؛
checkedInputStream Checksum = checkedInputStream جديد (FIS ، Adler32 () جديد) ؛
ZIS = new ZipinputStream (جديد bufferedInputStream (checksum)) ؛
دخول Zipentry ؛
بينما ((إدخال = zis.getNextentry ())! = null) {
عدد int
بيانات البايت [] = بايت جديد [عازلة] ؛
entrate entryName = intpling.getName () ؛
int index = internname.indexof (mainfilename) ؛
String NewEntryName = DESPATH+"/"+EntryName.SubString (INDEX) ؛
System.out.println (NewentRyName) ؛
ملف temp = ملف جديد (newentRyName) .getParentFile () ؛
if (! temp.exists ()) {
if (! temp.mkdirs ()) {
رمي new RunTimeException ("إنشاء ملف" +temp.getName () +"fail") ؛
}
}
fileOutputStream fos = new FileOutputStream (newentRyName) ؛
BufferedOutputStream Dest = جديد BufferedOutputStream (FOS ، Buffer) ؛
بينما ((count = zis.read (البيانات ، 0 ، المخزن المؤقت))! = -1) {
dest.write (البيانات ، 0 ، العد) ؛
}
dest.flush () ؛
dest.close () ؛
}
النتيجة = صواب ؛
} catch (fileNotfoundException e) {
E.PrintStackTrace () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
} أخيراً {
if (zis! = null) {
يحاول {
zis.close () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
}
}
إذا (النتيجة) {
logger.info ("تم.") ؛
}آخر{
logger.info ("فشل.") ؛
}
نتيجة العودة
}
الفراغ الثابت العام (سلسلة [] args) يلقي ioexception {
//ziputil.zip("d:/apache-tomcat-7.0.30 "،" d:/temp ") ؛
ملف zipfile = ملف جديد ("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 ؛
/**
* قم بفك ضغط الملف المضغوط في الدليل المحدد
*/
الفئة النهائية العامة Ziptofile {
/**
* يتخلف حجم ذاكرة التخزين المؤقت إلى 20480
*/
int static int static private file_buffer_size = 20480 ؛
ziptofile الخاص () {
}
/**
* فك ضغط الملف المضغوط المضغوط للدليل المحدد إلى الدليل المحدد
* param zipfilepathzip مسار الملف المضغوط
* param zipfilenamezip اسم الملف المضغوط
* param targetfiledirzip ملف مضغوط ليتم استخلاصه
* @قيمة العلم العائد المنطقي
*/
unzip الثابتة العامة (سلسلة zipfilepath ، سلسلة zipfilename ، سلسلة الهدف FileDir) {
العلم المنطقي = خطأ ؛
// 1.
ملف الملف = null ؛ // ملف مضغوط (مع المسار)
zipfile zipfile = null ؛
ملف = ملف جديد (zipfilepath + "/" + zipfilename) ؛
System.out.println (">>>>>> افصل الملف [" + zipfilepath + "/" + zipfilename + "] إلى [" + targetfileDir + "] دليل <<<<<<<") ؛
if (false == file.exists ()) {
system.out.println (">>>>>> ملف مضغوط [" + zipfilepath + "/" + zipfilename + "] غير موجود <<<<<<<") ؛
العودة كاذبة
} آخر إذا (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 ؛
يحاول {
// تحقق مما إذا كان ملف مضغوط
Zipfile = new zipfile (ملف) ؛
zipfile.close () ؛
// تحديد ما إذا كان الدليل المستهدف موجودًا.
ملف newdir = ملف جديد (TargetFileDir) ؛
if (false == newdir.exists ()) {
newdir.mkdirs () ؛
Newdir = null ؛
}
zis = new ZipinputStream (FileInputStream (ملف) جديد) ؛
zipentry zipentry = zis.getNextentry () ؛
// ابدأ في معالجة الملفات في الحزمة المضغوطة
بينما (null! = zipentry) {
String zipentryName = zipentry.getName (). استبدال ('//' ، '/') ؛
//تحكم على ما إذا كان Zipentry دليلًا
if (zipentry.isdirectory ()) {
int indexnumber = zipentryname.lastindexof ('/') ؛
إدخال الملف = ملف جديد (TargetFileDir + "/" + ZipentryName.subString (0 ، indexnumber)) ؛
enterDirs.mkdirs () ؛
intpldirs = null ؛
} آخر {
يحاول {
fos = new FileOutputStream (TargetFileDir + "/" + ZipentryName) ؛
بينما ((readsize = zis.read (buf ، 0 ، file_buffer_size))! = -1) {
fos.write (buf ، 0 ، readsize) ؛
}
} catch (استثناء e) {
E.PrintStackTrace () ؛
رمي new RunTimeException (E.GetCause ()) ؛
} أخيراً {
يحاول {
if (null! = fos) {
fos.close () ؛
}
} catch (ioException e) {
E.PrintStackTrace () ؛
رمي new RunTimeException (E.GetCause ()) ؛
}
}
}
zipentry = zis.getNextentry () ؛
}
العلم = صحيح ؛
} catch (zipexception e) {
E.PrintStackTrace () ؛
رمي new RunTimeException (E.GetCause ()) ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
رمي new RunTimeException (E.GetCause ()) ؛
} أخيراً {
يحاول {
if (null! = ZIS) {
zis.close () ؛
}
if (null! = fos) {
fos.close () ؛
}
} catch (ioException e) {
E.PrintStackTrace () ؛
رمي new RunTimeException (E.GetCause ()) ؛
}
}
}
العلم العودة
}
/**
* الطريقة الرئيسية للاختبار
*/
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
String ZipfilePath = "C: // home" ؛
String zipfilename = "LP20120301.zip" ؛
String TargetFileDir = "C: // Home // LP20120301" ؛
العلم المنطقي = ziptofile.unzip (zipfilepath ، zipfilename ، targetfiledir) ؛
إذا (العلم) {
System.out.println (">>>>>>> فك الضغط بنجاح <<<<<<") ؛
} آخر {
System.out.println (">>>>>> تفشل إزالة الضغط <<<<<<") ؛
}
}
}