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
分享到:
相关推荐
3. **保存已下载数据**:为了实现断点续传,需要将已下载的数据保存到本地文件系统中,并记录断点位置。 ```java RandomAccessFile oSavedFile = new RandomAccessFile("down.zip", "rw"); long nPos = 2000070; ...
以上就是Java断点续传的核心技术点。通过理解并实践这些概念,你可以开发出一个功能完善的文件断点续传系统,提高大文件下载的效率和用户体验。在实际项目中,可能还需要考虑如优化网络通信、提高并发性能以及如何在...
断点续传是一种文件传输技术,它允许用户在文件上传或下载过程中暂停,然后在稍后的时间从暂停的地方继续,而不是重新开始。这大大提高了用户体验,特别是对于大文件,如高清视频、大型软件安装包等。 Spring Boot...
在Java FTP中,通过检查文件的大小和修改时间,可以确定是否已经部分下载,然后使用FTPClient的`restart`方法指定新的起始位置来实现断点续传。 多线程在Java FTP中常用于提高文件下载速度。通过创建多个线程,每个...
Java中实现断点续传需要记录每个分片的上传状态,通常存储在数据库或临时文件中,当再次上传时检查已上传的分片并跳过。 4. **SpringBoot框架**:SpringBoot简化了Spring应用的初始化和配置,提供了自动配置、内嵌...
断点续传是一项非常实用的功能,它允许在上传或下载过程中中断后,从上次中断的位置继续,这对于大文件传输尤其重要,因为网络问题或服务器维护可能导致传输中断。 标题"XuChuanFTP_Java_FTP断点续传"可能是指一个...
Java 实现HTTP断点续传是一项在网络编程中非常实用的技术,尤其在大文件下载时能够提高用户体验,因为用户可以中断下载并在稍后从上次中断的地方继续。以下将详细讲解断点续传的原理以及如何使用Java来实现。 断点...
Java 断点续传的原理主要涉及到网络编程、文件处理以及多线程技术。断点续传是指在上传或下载大文件时,如果因为网络中断或其他原因导致传输不完整,可以从上次中断的地方继续传输,而不需要从头开始,极大地提高了...
"多线程断点续传工具类"通常指的是一个Java类,该类设计用于实现文件传输时的多线程功能,并且能够从上次中断的地方继续下载或上传,这在大文件传输中非常有用,因为它可以提高速度并避免因网络问题导致的传输失败。...
在Android平台上,文件下载是一项常见的任务,特别是在处理大型文件或多媒体资源时,为了提升用户体验,开发者通常会采用多线程下载并实现断点续传功能。断点续传允许用户在下载过程中暂停、恢复,避免因网络问题或...
2. **断点续传机制**:断点续传技术是通过保存已下载部分的信息,包括已下载的文件大小和文件的校验值,来实现的。在下载中断后,程序会根据这些信息找到上次的结束点,然后从该位置继续下载。在阿里云OSS SDK中,这...
在本文中,我们将深入探讨如何在Java中实现大文件的断点续传。 一、原理介绍 断点续传的核心在于记录文件传输的状态,这通常包括已传输的字节数和文件的总大小。当文件传输因网络问题或其他原因中断时,系统可以...
在Java中,使用HttpURLConnection实现断点续传,首先需要读取本地已下载文件的大小,然后设置请求头的Range字段。当从服务器接收到206 Partial Content的响应码时,说明服务器支持断点续传,客户端可以继续下载未...
### Java 实现文件断点续传(HTTP)技术详解 #### 一、断点续传的基本原理 断点续传是一种在网络传输过程中,当传输中断后能够从中断处继续传输的技术。这种技术对于大文件的传输尤其有用,可以避免因为网络问题导致...
在IT行业中,断点续传是一项非常实用的技术,特别是在大文件传输时,它可以提高网络效率并减少因网络中断而造成的资源浪费。Java作为一款广泛使用的编程语言,也提供了实现断点续传的能力。本篇文章将深入探讨如何用...
### Java实现FTP多线程断点续传:深入解析与技术要点 在现代软件开发中,数据传输是一项基本且关键的任务,特别是在处理大文件时,断点续传功能显得尤为重要。断点续传允许在网络连接中断后恢复传输,避免了重新...
Java多线程断点续传下载是一个复杂但实用的技术,尤其在处理大文件或网络不稳定时,能够提高用户体验并优化资源利用。以下是对这个主题的详细解析: **1. Java多线程** Java多线程是指在一个Java应用程序中同时执行...
断点续传技术是现代网络下载中非常关键的一项功能,尤其在大文件传输时更为重要。这个技术允许用户中断下载后,在同一位置继续下载,而无需重新开始,从而节省了大量的时间和带宽资源。在安卓系统中,实现断点续传...
在Java编程环境中,实现断点续传是一项重要的技术,它允许用户在文件传输过程中中断,然后在稍后的时间点继续从中断的地方开始,而无需重新开始整个过程。这在处理大文件时尤其有用,因为网络问题或其他因素可能导致...