يمكن لهذه الفئة ضغط الملفات المتعددة وإرجاعها.
نسخة الكود كما يلي:
/**
* وصف الطريقة: <b> فئة الاختبار </b> </br>
*/
الفئة العامة testFilestream {
// موقع تخزين الملفات والحزم المضغوطة
StringTempFilePath = "C:/temp/"
قائمة <Tring> fileList = NewArrayList <String> () ؛
FileList.add (tempfilePath+"file1.txt") ؛
FileList.add (tempfilepath+"file2.png") ؛
FileList.add (tempfilepath+"file3.xls") ؛
// اسم الحزمة المضغوطة التي تم إنشاؤها
stringzipName = "FileData" ؛
// العودة إلى الدفق
bytearrayoutputStreamOutputStream = filetozip (filelist ، filedata ، tempfilepath) ؛
// صفحة تدفق الحزمة المضغوطة
byte [] buffer = outputStream.TobyTearRay () ؛
// استجابة واضحة
استجابة. reset () ؛
// اضبط رأس الاستجابة
Response.addheader ("Disposition" ،
"المرفق ؛ اسم الملف ="+
مسجلة الأخبار (("datafile.zip"). getBytes ("GB2312") ، "ISO8859-1")) ؛
Response.addheader ("طول المحتوى" ، "+OutputStream.size ()) ؛
tooclient = newBufferedOutputStream (response.getOutputStream ()) ؛
استجابة.
toClient.write (العازلة) ؛
tooclient.flush () ؛
}
/**
*وصف الطريقة: <b> ضغط ملفات متعددة في حزم مضغوط </b> </br>
*/
publicbytearrayoutputstreamfiletozip (قائمة <string> fileList ، stringzipName ، StringTempFilePath) {
Byte [] Buffer = NewByte [1024] ؛
zipoutputStreamout = null ؛
يحاول{
out = newzipoutputStream (newFileOutputStream (tempFilePath+ZipName+". zip")) ؛
قائمة <IPT> fileData = NewArrayList <IPER> () ؛
لـ (inti = 0 ، len = fileList.size () ؛ i <len ؛ i ++)
{
filedata.add (newFile (fileList.get (i))) ؛
}
لـ (INTJ = 0 ، len = filedata.size () ؛ j <len ؛ j ++)
{
FileInputStreamFis = newFileInputStream (filedata.get (j)) ؛
out.putnextentry (newzipentry (filedata.get (j) .getName ())) ؛
intdatalen
// اقرأ محتوى الملف الذي تحتاجه لتنزيله وحزمه في ملف ZIP
بينما ((datalen = fis.read (buffer))> 0) {
Out.write (Buffer ، 0 ، Datalen) ؛
}
out.closeentry () ؛
fis.close () ؛
}
out.close () ؛
}
الصيد (استثناء)
{
ex.printStackTrace () ؛
}
// اقرأ الحزمة المضغوطة
filefilezip = newFile (tempfilePath+ZipName+". zip") ؛
bytearrayoutputstreambaos = null ؛
يحاول
{
baos = newByTearRayOutputStream () ؛
FileInputStreaminStream = newFileInputStream (filezip) ؛
bufferedInputStreamBis = newBufferedInputStream (instream) ؛
intc = bis.read () ؛
بينما (C! =-1) {
Baos.Write (C) ؛
c = bis.read () ؛
}
bis.close () ؛
instream.close () ؛
}
الصيد (استثناء)
{
ex.printStackTrace () ؛
}
Returnbaos
}