このクラスは、複数のファイルを圧縮して、プログラムでは、以下のコードを見てみるなど、他の機能のために返されたストリームを操作できます。
コードコピーは次のとおりです。
/**
*メソッド説明:<b>テストクラス</b> </br>
*/
パブリッククラスのtestfilestream {
//ファイルと圧縮パッケージのストレージ場所
stringtempfilepath = "c:/temp/"
List <String> 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();
//応答をクリアします
Response.reset();
//応答ヘッダーを設定します
Response.Addheader(「コンテンツディスポジション」、
"添付ファイル; filename ="+
NewString(( "dataFile.zip")。getBytes( "gb2312")、 "ISO8859-1"));
Response.Addheader( "Content-Length"、 ""+outputStream.size());
toclient = newbufferedOutputStream(respons.getOutputStream());
Response.setContentType( "Application/Octet-Stream");
toclient.write(buffer);
toclient.flush();
}
/**
*メソッド説明:<b>複数のファイルをzipパッケージに圧縮</b> </br>
*/
publicByTearRayOutputStreamFileTozip(リスト<String> Filelist、StringZipname、StringTempFilepath){
byte [] buffer = newbyte [1024];
zipoutputStreamout = null;
試す{
out = newZipoutputStream(newFileOutputStream(tempfilepath+zipname+"。zip"));
List <file> filedata = newArrayList <file>();
for(inti = 0、len = filelist.size(); i <len; i ++)
{
filedata.add(newfile(filelist.get(i)));
}
for(intj = 0、len = filedata.size(); j <len; j ++)
{
fileInputStreamFis = newFileInputStream(filedata.get(j));
out.putnextentry(newzipentry(filedata.get(j).getname()));
intdatalen;
//ファイルのコンテンツを読み取り、ダウンロードしてzipファイルにパッケージ化する必要があります
while((datalen = fis.read(buffer))> 0){
out.write(buffer、0、datalen);
}
out.closeentry();
fis.close();
}
out.close();
}
catch(ExceptionEx)
{
ex.printstacktrace();
}
//圧縮パッケージを読みます
filefilezip = newfile(tempfilepath+zipname+"。zip");
bytearrayoutputStreambaos = null;
試す
{
baos = newbytearrayoutputStream();
fileInputStreamInstream = newFileInputStream(filezip);
BufferedInputStreambis = newbufferedInputStream(instream);
intc = bis.read();
while(c!= -1){
baos.write(c);
c = bis.read();
}
bis.close();
instream.close();
}
catch(ExceptionEx)
{
ex.printstacktrace();
}
Returnbaos;
}