JAVA 如何一次下载多个文件
我用的是wicket框架,一次下载一个文件很简单用自带的类,可是下载多个文件的时候怎么办呢不能一个劲蹦保存框吧目前只能想到两个办法1所有选择文件放到一个文件夹2把所有选择...
我用的是wicket框架,一次下载一个文件很简单用自带的类,可是下载多个文件的时候怎么办呢 不能一个劲蹦保存框吧
目前只能想到两个办法
1所有选择文件放到一个文件夹
2把所有选择文件压缩成zip然后保存
不管哪种方法都不知道如何实现所以来这里提问
什么框架都行 请问大家一次下载多个文件是怎么做的?java语言 展开
目前只能想到两个办法
1所有选择文件放到一个文件夹
2把所有选择文件压缩成zip然后保存
不管哪种方法都不知道如何实现所以来这里提问
什么框架都行 请问大家一次下载多个文件是怎么做的?java语言 展开
6个回答
2018-03-06
展开全部
创建多线程下载
如果说方便下载,是打包再下载
~~~~~~~~~~~~~~~~~~~~~~
如果说方便下载,是打包再下载
~~~~~~~~~~~~~~~~~~~~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
线程池,多线程操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你自己已经给出方案了,百度网盘的多文件下载也是这么处理的。先压缩,然后提供压缩后的文件下载,压缩的代码搜索下一大版!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Vector;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 本例使用的是基于JDK HttpURLConnection的同步下载,即按顺序下载
* 如果同时下载多个任务,可以使用多线程
* @author aK1ng
*
*/
public class Demo1 {
public static void main(String[] args) {
// 下载列表
Vector<String> downloadList = new Vector<String>();
// 添加下载地址
downloadList.add("
);
downloadList.add("
);
download(downloadList);
}
/**
* 下载
*/
static void download(Vector<String> downloadList){
// 线程池
ExecutorService pool = null;
HttpURLConnection connection = null;
//循环下载
try {
for (int i = 0; i < downloadList.size(); i++) {
pool = Executors.newCachedThreadPool();
final String url = downloadList.get(i);
String filename = getFilename(downloadList.get(i));
System.out.println("正在下载第" + (i+1) + "个文件,地址:" + url);
Future<HttpURLConnection> future = pool.submit(new Callable<HttpURLConnection>(){
@Override
public HttpURLConnection call() throws Exception {
HttpURLConnection connection = null;
connection = (HttpURLConnection) new URL(url).openConnection();
connection.setConnectTimeout(10000);//连接超时时间
connection.setReadTimeout(10000);// 读取超时时间
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("GET");
//断点续连,每次要算出range的范围,请参考Http 1.1协议
//connection.setRequestProperty("Range", "bytes=0");
connection.connect();
return connection;
}
});
connection = future.get();
System.out.println("下载完成.响应码:"+ connection.getResponseCode());
// 写入文件
writeFile(new BufferedInputStream(connection.getInputStream()), URLDecoder.decode(filename,"UTF-8"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != connection)
connection.disconnect();
if (null != pool)
pool.shutdown();
}
}
/**
* 通过截取URL地址获得文件名
* 注意:还有一种下载地址是没有文件后缀的,这个需要通过响应头中的
* Content-Disposition字段 获得filename,一般格式为:"attachment; filename=\xxx.exe\"
* @param url
* @return
*/
static String getFilename(String url){
return ("".equals(url) || null == url) ? "" : url.substring(url.lastIndexOf("/") + 1,url.length());
}
/**
* 写入文件
* @param inputStream
*/
static void writeFile(BufferedInputStream bufferedInputStream,String filename){
//创建本地文件
File destfileFile = new File("d:\\temp\\download\\"+ filename);
if (destfileFile.exists()) {
destfileFile.delete();
}
if (!destfileFile.getParentFile().exists()) {
destfileFile.getParentFile().mkdir();
}
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(destfileFile);
byte[] b = new byte[1024];
int len = 0;
// 写入文件
System.out.println("开始写入本地文件.");
while ((len = bufferedInputStream.read(b, 0, b.length)) != -1) {
System.out.println("正在写入字节:" + len);
fileOutputStream.write(b, 0, len);
}
System.out.println("写入本地文件完成.");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != fileOutputStream) {
fileOutputStream.flush();
fileOutputStream.close();
}
if (null != bufferedInputStream)
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
启用多线程。。Thread和Runnable两种方法。。最好用Runnable接口,,看看这方面的资料,优化一下你的软件,就没问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |