Now I want to paste the main code of this program for your reference:
<% @ Page import = "java. util .*,
Java.net .*,
Java. text .*,
Java.util.zip .*,
Java. io. * "%>
<%!
Static Vector expandFileList (String [] files, boolean inclDirs ){
Vector v = new Vector ();
If (files = null) return v;
For (int j = 0; j <files. length; I ++) v. add (new File (URLDecoder. decode (files [j]);
For (int I = 0; I <v. size (); I ++ ){
File f = (File) v. get (I );
If (f. isDirectory ()){
File [] fs = f. listFiles ();
For (int n = 0; n <fs. length; n ++) v. add (fs [n]);
If (! InclDirs ){
V. remove (I );
I --;
}
}
}
Return v;
}
Class Writer2Stream extends OutputStream {
Writer out;
Writer2Stream (Writer w ){
Super ();
Out = w;
}
Public void write (int I) throws IOException {
Out. write (I );
}
Public void write (byte [] B) throws IOException {
For (int j = 0; j <B. length; j ++ ){
Int n = B [j];
// Convert byte to ubyte
N = (n >>> 4) & 0xF) * 16 + (n & 0xF );
Out. write (n );
}
}
Public void write (byte [] B, int off, int len) throws IOException {
For (int j = off; j <off + len; j ++ ){
Int n = B [j];
N = (n >>> 4) & 0xF) * 16 + (n & 0xF );
Out. write (n );
}
}
}
%>
<%
//// Download the compressed file package
Vector v = expandFileList (request. getParameterValues ("selfile"), false );
If (v. size () = 0 ){
Request. setAttribute ("error", "No files selected ");
}
Else {
File dir_file = new File (request. getRealPath ("") + "/myfile /");
Int dir_l = dir_file.getAbsolutePath (). length ();
Response. setContentType ("application/zip ");
Response. setHeader ("Content-Disposition", "attachment; filename = \" downloadname.rar \"");
Out. clearBuffer ();
ZipOutputStream zipout = new ZipOutputStream (new Writer2Stream (out ));
Zipout. setComment ("Download selected files \ nas one WinRAR file: \ ndownloadname.rar ");
Zipout. setLevel (1 );
For (int I = 0; I <v. size (); I ++ ){
File f = (File) v. get (I );
If (f. canRead ()){
Zipout. putNextEntry (new ZipEntry (f. getAbsolutePath (). substring (dir_l + 1 )));
BufferedInputStream fr = new BufferedInputStream (new FileInputStream (f ));
Byte buffer [] = new byte [0 xffff];
Int B;
While (B = fr. read ())! =-1) zipout. write (B );
Fr. close ();
Zipout. closeEntry ();
}
}
Zipout. finish ();
Out. flush ();
}
%>