001.
package
download;
002.
003.
004.
005.
import
java.io.File;
006.
007.
import
java.io.FileInputStream;
008.
009.
import
java.io.FileNotFoundException;
010.
011.
import
java.io.FileOutputStream;
012.
013.
import
java.io.IOException;
014.
015.
import
java.io.ObjectInputStream;
016.
017.
import
java.io.ObjectOutputStream;
018.
019.
import
java.io.Serializable;
020.
021.
import
java.net.HttpURLConnection;
022.
023.
import
java.net.MalformedURLException;
024.
025.
import
java.net.URL;
026.
027.
import
java.util.Calendar;
028.
029.
import
java.util.concurrent.ExecutorService;
030.
031.
032.
033.
import
javax.swing.JOptionPane;
034.
035.
import
javax.swing.JTable;
036.
037.
038.
039.
@SuppressWarnings
(
"serial"
)
040.
041.
public
class
FileTask
implements
Serializable, Runnable {
042.
043.
private
FileInfo fileInfo =
null
;
044.
045.
private
SplitFileTask[] splitTask =
null
;
046.
047.
private
long
fileLength;
048.
049.
private
long
[] startPos;
050.
051.
private
long
[] endPos;
052.
053.
private
int
countThread;
054.
055.
private
boolean
isFirst =
true
;
056.
057.
private
boolean
isStop =
true
;
058.
059.
private
File tempFile;
060.
061.
private
ExecutorService executor =
null
;
062.
063.
private
JTable viewTable =
null
;
064.
065.
private
int
row =
0
;
066.
067.
private
String speed =
null
;
068.
069.
070.
071.
public
FileTask(FileInfo fileInfo, ExecutorService executor) {
072.
073.
this
.fileInfo = fileInfo;
074.
075.
this
.executor = executor;
076.
077.
}
078.
079.
080.
081.
public
void
run() {
082.
083.
if
(fileInfo.isOver())
084.
085.
return
;
086.
087.
else
088.
089.
isStop =
false
;
090.
091.
092.
093.
tempFile =
new
File(fileInfo.getFilePath() + File.separator
094.
095.
+ fileInfo.getFileName() +
".info"
);
096.
097.
countThread = fileInfo.getConutThread();
098.
099.
100.
101.
if
(tempFile.exists()) {
102.
103.
isFirst =
false
;
104.
105.
System.out.println(
"文件已存在,是续传文件"
+ tempFile);
106.
107.
readFilePos();
108.
109.
}
else
{
110.
111.
startPos =
new
long
[countThread];
112.
113.
endPos =
new
long
[countThread];
114.
115.
splitTask =
new
SplitFileTask[countThread];
116.
117.
fileLength = getFileLong();
118.
119.
if
(fileLength <=
0
) {
120.
121.
JOptionPane jp =
new
JOptionPane(
"网络资源不正确!"
);
122.
123.
jp.createDialog(
"提示信息"
);
124.
125.
return
;
126.
127.
}
128.
129.
fileInfo.setStartDate(Calendar.getInstance());
130.
131.
fileInfo.setFileLength(fileLength);
132.
133.
}
134.
135.
long
tem = fileLength / countThread;
136.
137.
if
(isFirst) {
138.
139.
for
(
int
i =
0
; i < countThread; i++) {
140.
141.
startPos[i] = i * tem;
142.
143.
}
144.
145.
for
(
int
i =
0
; i < countThread -
1
; i++) {
146.
147.
endPos[i] = startPos[i +
1
];
148.
149.
}
150.
151.
endPos[countThread -
1
] = fileLength;
152.
153.
for
(
int
i =
0
; i < countThread; i++) {
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
String path = fileInfo.getFilePath() +
"//"
164.
165.
+ fileInfo.getFileName();
166.
167.
splitTask[i] =
new
SplitFileTask(fileInfo.getSiteURL(), path,
168.
169.
i, startPos[i], endPos[i]);
170.
171.
}
172.
173.
}
174.
175.
176.
177.
178.
179.
for
(
int
i =
0
; i < countThread; i++) {
180.
181.
182.
183.
executor.execute(splitTask[i]);
184.
185.
}
186.
187.
long
tempLength = testFileLength();
188.
189.
190.
191.
boolean
flag =
true
;
192.
193.
194.
195.
while
(!isStop) {
196.
197.
speed = MyControl.speed(tempLength, testFileLength(),
0
.5f);
198.
199.
tempLength = testFileLength();
200.
201.
showViewTable();
202.
203.
writeFilePos();
204.
205.
if
(flag) {
206.
207.
fileInfo.setSpendTime(fileInfo.getSpendTime() +
1
);
208.
209.
}
210.
211.
flag = !flag;
212.
213.
MyControl.sleep(
500
);
214.
215.
int
i =
0
;
216.
217.
for
(; i < countThread; i++) {
218.
219.
if
(!splitTask[i].isStop()) {
220.
221.
break
;
margin-left: 1
分享到:
相关推荐
代码实现了一个下载服务端文件的断点续传功能。 节省下载时间以及资源消耗 在多终端下载导致云服务器压力大时,有更好的下载体验
其中包含的doc文件夹存放的是有MyEclipse,javadoc生成的关于下载器的API文档; (2)“jar包”文件夹,其中myDownloader2.0.jar可以双击运行下载器 (前提,电脑上装有JDK环境)。 3、可查看下载器“功能介绍”...
在下载管理器中实现多线程下载的逻辑,包括文件分块、断点续传等功能。 使用线程池来管理下载任务的线程,可以提高线程的复用性和效率。 在下载过程中处理线程同步和资源释放,确保线程安全性和资源的正确释放。 ...
# Java多线程与线程安全实践-基于Http协议的断点续传.zip中文介绍 这个压缩文件包含了一个Java多线程与...如果您正在学习Java多线程编程,或者正在寻找一个实用的断点续传实现,那么这个项目将是一个很好的学习资源。
在实现断点续传的过程中,我们需要考虑如何使用Java多线程来实现文件的分块下载和断点续传。具体步骤如下: 2.1 连接到服务器 使用Java的HttpURLConnection类连接到服务器,并发送GET请求获取要下载的文件的基本...
Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程下载和断点续传功能,同时确保线程安全。该项目的主要特点如下: 1. 多线程下载:项目采用了Java的...
Android 文件断点续传源码.zip源码资源下载Android 文件断点续传源码.zip源码资源下载
本资源包“Java多线程与线程安全实践-基于Http协议的断点续传.rar”是一个针对计算机科学专业学生设计的毕业设计或课程项目源码文件集合。该项目旨在通过实现一个基于HTTP协议的文件断点续传功能,深入探索和实践...
4. HTTP协议的Range请求和Content-Range响应配合才能完成分段下载或断点续传,当然这需要服务器的支持,在核心代码有检测; 5. 使用了RandomAccessFile类对文件进行了随机读写; 6. 对HTTP数据流的读取做了简单的...
Breakpoint-continuingly-download-file 这是一个以Cocos2d-x c++ 断点续传功能下载文件的项目源码 This is a Cocos2d-x c++ source breakpoint continuingly functions…. 软件开发设计:应用软件开发、系统软件...
多线程断点续传实践,含技术文档,原理讲解,java源代码。可以直接使用,也可以根据需求修改,也可以参考学习
用户可以根据自己的网络状况选择恢复下载的分包,实现灵活的断点续传。 设计采用多线程技术,开启多个线程同时处理多个用户的下载请求,提高系统的并发处理能力和吞吐量。同时采用线程安全技术,通过锁的使用避免多个...
本资源是个人花了两个星期的成果,主要是针对跨域大文件断点续传实战+自定义限速 ,如果想看详细介绍请访问 http://blog.csdn.net/qq_27063119 ,尊重别人的劳动成果,6金币不足未过吧。
此资源集包含了一套完整的Java实现的多线程与线程安全实践项目源代码、相关的毕业论文以及详尽的使用说明。它旨在提供一个全面、深入的学习和研究工具,适用于本科课程设计、毕业设计以及任何希望深入学习Java编程的...