求助文件打包下载的问题 我做网络硬盘,但选择一个文件夹时点下载,就是要把文件夹里所有的文件都下载下来,怎么同时下载几个文件呢,网易网盘是先把文件打包,然后下载,可是怎么把几个文件打包呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JSP中将多个文件打包下载代码:<%@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); } } } %> <% /////下载压缩文件包 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[0xffff]; int b; while ((b=fr.read())!=-1) zipout.write(b); fr.close(); zipout.closeEntry(); } } zipout.finish(); out.flush(); } %> 求会使用Spring Tool Suite的前辈。 关于创建服务器对象 关于数据库增删改的问题请高手回答 jquery select的疑问 很急!! java struts2问题,在线等答案,知道的帮帮忙,谢谢 输入首页对应的域名,则首页中包含的JSP页就显示无法找到? JSP 取值 jboss 安装出现繁体 如何在TOMCAT里安装已经编译好的SERVLET? request.getSession(false) 引起的疑问 文件打包下载 websphere下部署的程序Caused by: java.lang.NullPointerException
<%@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);
}
}
}
%>
<%
/////下载压缩文件包
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[0xffff];
int b;
while ((b=fr.read())!=-1) zipout.write(b);
fr.close();
zipout.closeEntry();
}
}
zipout.finish();
out.flush();
}
%>