请问一个java的文件下载的问题,为什么我的下载每次都看不到进度条,而是一下子就下好了呢?

我是用流的方式写的下载,部分代码如下:bis=newBufferedInputStream(newFileInputStream(file));bos=newBuffer... 我是用流的方式写的下载,部分代码如下:
bis = new BufferedInputStream(new FileInputStream(file));
bos = new BufferedOutputStream(response.getOutputStream());

byte[] buffer = new byte[4096];
while (-1 != (n = bis.read(buffer))) {
bos.write(buffer, 0, n);
bos.flush();
}
为什么这段代码执行的时候,总是看不到平常下载的进度条,而是每次都一下就下好了。而且碰到大文件的时候,那个保存框也要等很久才会跳出来,感觉就是文件在后台下载完了才跳出对话框,让我保存。请问有什么办法能让这个下载达到平常http下载时候一样一点一点的下载呢?
我说的只是小文件很快,但是遇到大文件就会等很久才会弹出保存的对话框,这个时候用户会不知道发生什么事了,这样的用户体验可不好
展开
 我来答
匿名用户
2011-06-13
展开全部
建立新的线程来处理下载。去看Thread的API有详细说明。例如本来是:
downloading();
System.out.println("下载完成");
就改成:
class DownloadListener {//这个class自己找个地方放。
public void downloadInProgress(double percent) {
System.out.println("已下载" + percent);
}
public void downloadCompleted() {
System.out.println("已下载完成");
}
}
//从这里开始应该被改成的内容
DownloadListener downloadListener = new DownloadListener();
new Thread() {
public void run() { //这里写第二线程的内容
downloading(downloadListener);//于是downloadListener被传入了downloading函数,就可以在downloading函数内部通过呼叫downloadListener的downloadInProgress和downloadCompleted来通知第一线程下载情况。
}
}.start(); //第一线程会在这里启动第二线程,然后不管第二线程执行了什么是否完成,直接执行下一句。
System.out.println("第二线程已经启动");
//例子里很多System.out.println是为了简明。实际情况一般是修改一个给用户看的状态栏JLabel,这里下载进行中时,应该是更新一个JProgressBar。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c8d42fc
2011-06-11 · TA获得超过131个赞
知道小有建树答主
回答量:122
采纳率:100%
帮助的人:75.9万
展开全部
快了还不好,多此一举
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
菟丝花0707
2011-06-11 · TA获得超过596个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:122万
展开全部
你的网速快,下载的文件小,没办法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式