这两天把原来写的多线程下载程序整理了一下,考虑到原来的都是散文件,使用起来也不方便,所以决定把其写JAR,这样,使用起来也方便。并且增加使用XML保存下载文件以便下次再次下载,也修正了原来的一些BUG,只要你的电脑允许,想同时有多少个下载就有多少个下载。
这里我有一个示例,因为这里用到了JDOM处理XML文件,本来是想把用到的JDOM也把包到downFile.jar(下载地址:http://dl2.csdn.net/down4/20070710/10102631756.rar,源程序下载地址:http://dl2.csdn.net/down4/20070710/10140804846.rar)(第一次修正后的jar:(又传不上来了))里面的,可是试了好多次、好几种方法都不行,所以你首先得把JDOM配好,然后再把我的downFile.jar也放在类路径里面,直接运行就可以看到效果,在保存文件目录下面会生成一个保存文件下载的XML文件,该文件不能够自动删除,可以删除也可以不删除,并不会影响到程序的运行,这个文件主要是方便于断点续传,下面是示例源程序,很简单的:
import com.downfile.*;
/*
*请先配置好JDOM及downFile.jar
*作者:http://blog.csdn.net/fenglibing
*希望听到各位的见意,里面肯定还有很多的不足,如果需要源程序,请给我联系。
*/
public class DownFileTest {
public DownFileTest() {
}
public static void main(String[] args) {
String urlFile; //网络地址
int threadNum; //文件下载线程数
String localAddress; //本地地址
urlFile = "http://www.netbox.cn:88/download/nbsetup.EXE";
//现在还只能够处理1到9个线程,后面的的版本再增加
threadNum = 9;
//注:路径的形式一定要写出下面的格式,特别的最好的路径称号不能缺
localAddress = "d:\\multiDownTest\\";//这个文件夹如果不存在,会自动创建
//这里采用三个软件同时下载,当然你可以多下载,使用就是这么方便
DownFile downFile = new DownFile(urlFile, threadNum, localAddress);
downFile.startDownFile();
urlFile = "http://dl.360safe.com/setup.exe";
DownFile downFile1 = new DownFile(urlFile, threadNum, localAddress);
downFile1.startDownFile();
urlFile = "http://down.sandai.net/Thunder5.6.8.329.exe";
DownFile downFile2 = new DownFile(urlFile, threadNum, localAddress);
downFile2.startDownFile();
}
}
--------------------------------------------------
BUG修正:
抓出来的BUG,错误分析及解决方案:
1、发生错误,说是找不到文件
原因,肯定是在合并的时候,又在删除文件,并且删除文件比合并先完成,而不是合成完成后再删除文件
java.io.FileNotFoundException: d:\multiDownTest\tmp0\setup.exe.part27.tp (系统找不到指定的路径。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
at com.downfile.GetFileThread.run(GetFileThread.java:148)
at java.lang.Thread.run(Thread.java:595)
解决:原来的利用线程去检测临时文件夹中是否还有.tp临时文件,如果没有就执行合并及删除操作,
假设当前只有一个临时文件,而恰恰就在这个时假完成了,那么下面就没有临时文件了,那此
我就执行了合并删除操作,而我的程序去还要去删除那些根本没有产生的文件,所以就会报错,
解决方法:下面的“为什么找不到文件”
2、在程序运行的过程中,到生成的临时文件夹中去查看,如要求生成30个线程,可是在临时文件夹下面
只能够看到10多个左右的临时文件,表明线程并没有完成生成
有两个原因:
1)本身程序的问题,就是没有把线程抛出完,就却执行下一个操作,是还没有来得急产生需要数目的线程,
另外的线程在执行中
解决办法:如下“为什么找不到文件”
为什么找不到文件:
我想可能是这样的,因为线程在创建的时候,有可能只创建只创建了一个线程,就被其它的线程给抢走了,
而检查当前文件夹下面是否还有.tp文件就刚好在这个文件下载完成的时候去检测,那它就认为没有.tp文件了,
解决办法:
1):是把检测时间设长一点
2):一定要当前是二十个(如线程数为20)文件才能够说是完成了
3):两者同时使用,要保证当前文件夹下面文件的数目是我们设定的设定的线程数目才去检测是否已经完成
检测时间可不设那么长,因为这要拖延时间,这就会间接的产生超时错误
3、java.net.ConnectException: Connection timed out: connect,连接超时错误,如果一个线程
的操作时间过长,超过了默认的等待时间,那么线程就会报操作超时的错误,因为在当前程序中操作I/O的
时候比较多,为了尽量减少超时的可能性,我通过程序设定了超时的时间为15秒。当然,并不能够完全避免
超时的错误,只能够说尽量的避免,这还与个人电脑的配置及网络的带宽有一定的联系了。
4、出现数字格式化错误:
java.lang.NumberFormatException: null
at java.lang.Long.parseLong(Long.java:372)
at java.lang.Long.parseLong(Long.java:461)
at com.downfile.MultiThreadGetFile.init(MultiThreadGetFile.java:148)
at com.downfile.MultiThreadGetFile.run(MultiThreadGetFile.java:196)
at java.lang.Thread.run(Thread.java:595)
原因:在格式化取得文件长度为长整性时发生错误,一时有可能当前网络一时阻塞,没能够获得文件的长度,
就会出错,原来没有在这个方面处理一下,现在一直去读该文件去读,直到一定的次数后才放弃,这样
就保证不能够读到文件长度的机率大大减少,增强的程序的健状性。
注:该程序在运行的时候还是有可能出现连接超时的情况,如果出现这种情况,请再尝试调用程序,此时程序会自动进行断点续传,前提是没有更改下载线程数及文件存放位置。
分享到:
相关推荐
2、支持多任务多线程同时下载; 3、每个任务的线程数由用户在新建任务时自定义,缺省为5个线程; 4、任务下载过程中可以点击“线程+”或“线程-”即时增减线程; 5、选择任务,可以在任务信息栏中查看任务下载的信息...
本文将详细介绍如何利用Java实现一个名为"downFile"的多线程断点续传JAR工具,帮助用户更便捷地下载大文件,提高下载效率,并确保在网络中断后能够继续未完成的下载。 首先,多线程下载是指将一个大文件分成多个...
同时,"【成品】多线程断点续传工具.jar"可能是一个可执行的Java应用程序,它提供了用户界面或者命令行工具,让用户可以方便地进行断点续传的文件上传。 多线程断点续传进一步提高了文件传输的效率。通过将文件分割...
总结,这个资源包涵盖了Java多线程编程的基础和实践,以及在网络通信中实现断点续传的技巧,对于想要提升并发处理能力以及网络编程技能的开发者来说,是非常有价值的参考资料。通过学习和实践,开发者可以更好地理解...
在Java开发中,大文件上传是一项常见的需求,尤其是在云存储、文件分享等场景下。大文件的上传可能会遇到...对于开发者而言,理解并掌握大文件分块上传与断点续传技术,不仅可以优化用户体验,还能提高服务的可靠性。
该源码项目基于SWT技术,实现了一个跨平台的Java多线程文件断点续传下载系统。项目总文件量为117个,其中包括49个类文件、24个Java源文件、22个JAR文件、8个JPG图片文件、4个PNG图片文件、2个Markdown文件和2个...
2. **断点续传功能**:该下载工具支持断点续传,意味着如果下载过程中由于网络问题或其他原因中断,可以从上次中断的地方继续下载,而不是重新开始。这涉及到文件的分块管理和状态持久化,通常需要保存已下载部分的...
2、支持多任务多线程同时下载; 3、线程数由用户在新建任务时设定(若大于线程数20则默认为20); 4、下载过程中可以暂停,点击开始可以继续下载; 5、点击菜单栏“任务——退出程序”正常退出,可以保存当前未...
在本Java毕业设计项目中,主要探讨了多线程技术和线程安全的实践,特别是针对基于HTTP协议的断点续传功能的实现。这个项目是一个实际可运行的应用,旨在帮助学生深入理解Java并发编程和网络通信的核心概念。 首先,...
标题中的“基于Java的多线程与线程安全实践”是指在Java编程环境中...综上所述,这个毕业设计涵盖了Java多线程编程、线程安全实践、HTTP协议应用以及文件断点续传的实现,对于学习和理解这些核心技术有很好的实践价值。
1. **android-mutildownload-v2.0.jar**:这是一个Java类库文件,包含实现断点续传功能的代码。在Android项目中,开发者可以通过添加这个库来引入断点续传功能。 2. **MutilDownloadDemo**:很可能是一个示例应用...