Cette classe peut comprimer plusieurs fichiers et retourner des flux.
La copie de code est la suivante:
/ **
* Méthode Description: <b> Classe de test </b> </br>
* /
classe publique TestFileStream {
// Emplacement de stockage des fichiers et des packages compressés
StringTempFilePath = "c: / temp /"
List <string> fileList = newArrayList <string> ();
fileList.add (tempFilePath + "file1.txt");
fileList.add (tempFilePath + "file2.png");
fileList.add (tempFilePath + "file3.xls");
// le nom du package compressé généré
StringZipName = "FileData";
// Retour au flux
ByteArrayOutputStreamOutputStream = filetozip (FileList, Filedata, tempFilePath);
// Flux de paquets compressés d'entrée de page
Byte [] buffer = outputStream.ToByTearray ();
// Réponse claire
réponse.RESET ();
// définit l'en-tête de réponse
réponse.addheader ("contenu-disposition",
"attachement; filename =" +
newstring (("datafile.zip"). GetBytes ("GB2312"), "ISO8859-1"));
réponse.Addheader ("Content-Length", "" + OutputStream.size ());
toClient = newBufferedoutputStream (réponse.getOutputStream ());
Response.SetContentType ("Application / Octet-Stream");
toClient.write (tampon);
toClient.flush ();
}
/ **
* Méthode Description: <b> Compresser plusieurs fichiers dans des packages zip </b> </br>
* /
publicByteArrayOutputStreamFileTozip (list <string> fileList, stringzipname, stringTempFilePath) {
octet [] buffer = NewByte [1024];
ZipOutputStreamout = null;
essayer{
out = newzipOutputStream (newFileOutputStream (tempFilePath + zipname + ". zip"));
List <Fichier> fileData = newArrayList <Fichier> ();
pour (inti = 0, len = fileList.size (); i <len; i ++)
{
filedata.add (newFile (fileList.get (i)));
}
pour (intj = 0, len = filedata.size (); j <len; j ++)
{
FileInputStreamfis = newFileInputStream (fileData.get (j));
OUT.PUTNEXTENTRY (NewZipentry (filedata.get (j) .getName ()));
Intdatalen;
// Lire le contenu du fichier que vous devez télécharger et le emballer dans le fichier zip
while ((datalen = fis.read (tampon))> 0) {
out.write (tampon, 0, données);
}
out.closeEntry ();
fis.close ();
}
out.close ();
}
Catch (exceptionEx)
{
ex.printStackTrace ();
}
// Lire le package compressé
FileFileZip = newFile (tempFilePath + zipname + ". Zip");
ByteArrayOutputStreAmbaos = null;
essayer
{
baos = newByteArrayOutputStream ();
FileInputStreAmInStream = newFileInputStream (filezip);
BufferedInputStreambis = newBufferedInputStream (insive);
intc = bis.read ();
tandis que (c! = - 1) {
baos.write (c);
c = bis.read ();
}
bis.close ();
instream.close ();
}
Catch (exceptionEx)
{
ex.printStackTrace ();
}
returnbaos;
}