所謂斷點續(xù)傳,說的通俗一點就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。說的準(zhǔn)確點,斷點續(xù)傳指的就是在下載或上傳時,將下載或上傳任務(wù)(一個文件)人為的劃分為幾個部分,每一個部分采用一個線程進行上傳或下載,如果碰到網(wǎng)絡(luò)故障或人為因素導(dǎo)致程序終止后,下次還可以從已經(jīng)上傳或下載的部分開始繼續(xù)上傳下載未上傳下載的部分,而沒有必要重頭開始上傳下載。關(guān)鍵可以方便用戶,節(jié)省時間,提高效率。二、軟件功能介紹本軟件" />

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Java斷點續(xù)傳實現(xiàn)資源文件下載軟件

系統(tǒng) 2327 0

一、斷點續(xù)傳原理 <?XML:NAMESPACE PREFIX = O />

?

?

所謂斷點續(xù)傳,說的通俗一點就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。

?

說的準(zhǔn)確點,斷點續(xù)傳指的就是在下載或上傳時,將下載或上傳任務(wù)(一個文件)人為的劃分為幾個部分,每一個部分采用一個線程進行上傳或下載,如果碰到網(wǎng)絡(luò)故障或人為因素導(dǎo)致程序終止后,下次還可以從已經(jīng)上傳或下載的部分開始繼續(xù)上傳下載未上傳下載的部分,而沒有必要重頭開始上傳下載。關(guān)鍵可以方便用戶,節(jié)省時間,提高效率。

?

?

二、軟件功能介紹

?

本軟件使用 Java Swing 界面編程,多線程,序列化與反序列化等 J2SE 基礎(chǔ)知識,其中斷點續(xù)傳的核心技術(shù)是 Java 對象的序列化和反序列化。

?

本軟件的主要功能如下:

?

<!--[if !supportLists]--> 1. ??? <!--[endif]--> 新建任務(wù)

?

?

新建下載任務(wù),填寫 url, 線程數(shù),保存路徑點“確定”后主窗口中添加一個下載任務(wù)。

?

<!--[if !supportLists]--> 2. ??? <!--[endif]--> 任務(wù)開始

?

?

在等待下載的記錄中選擇一條記錄點“任務(wù)開始”后被選擇的記錄開始下載

?

?

<!--[if !supportLists]--> 3. ??? <!--[endif]--> 任務(wù)暫停

?

?

在正在下載的記錄中選擇一天記錄執(zhí)行此功能,暫停記錄的下載

?

?

<!--[if !supportLists]--> 4. ??? <!--[endif]--> 任務(wù)續(xù)傳

?

?

一條記錄暫停后如果需要重新下載可以選擇“任務(wù)續(xù)傳”功能,繼續(xù)下載本條記錄。

?

?

<!--[if !supportLists]--> 5. ??? <!--[endif]--> 任務(wù)取消

?

?

從下載任務(wù)中刪除不符合條件的紀(jì)錄。

?

?

<!--[if !supportLists]--> 6. ??? <!--[endif]--> 視圖

?

?

在視圖功能中可以顯示和隱藏工具欄、狀態(tài)欄

?

?

<!--[if !supportLists]--> 7. ??? <!--[endif]--> 幫助

?

?

幫助中顯示軟件的作者,聯(lián)系方式等相關(guān)信息。

?

?

三、軟件核心代碼:

?

斷點續(xù)傳內(nèi)核的實現(xiàn)主要用了 8 個類:

?

FileInfo.java ??????? 描述下載文件的詳細(xì)信息,下載文件的網(wǎng)絡(luò)地址 URL

?

FileTask.java ??????? 任務(wù)主線程,同時還描述任務(wù)的詳細(xì)信息

?

MainFrame.java ?????? 下載界面

?

MyControl.java ?????? 工具類,放一些方法

?

MyListener.java ????? 主要是一些事件操作

?

NewTask.java ???????? 新建任務(wù)界面

?

SplitFileTask.java ?? 分任務(wù)線程

?

TestMain.java ??????? 最后還有一個測試類

?
1. FileInfo.java
,描述下載文件的詳細(xì)信息

?

Java代碼

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 ; // 任務(wù)文件信息
044. ? ?
045. ???? private SplitFileTask[] splitTask = null ; // 分任務(wù)數(shù)組
046. ? ?
047. ???? private long fileLength; // 獲得文件的長度
048. ? ?
049. ???? private long [] startPos; // 分任務(wù)開始位置
050. ? ?
051. ???? private long [] endPos; // 分任務(wù)結(jié)束位置
052. ? ?
053. ???? private int countThread; // 分任務(wù)的數(shù)目
054. ? ?
055. ???? private boolean isFirst = true ; // 是否第一次取文件
056. ? ?
057. ???? private boolean isStop = true ; // 停止標(biāo)志
058. ? ?
059. ???? private File tempFile; // 文件下載的臨時信息
060. ? ?
061. ???? private ExecutorService executor = null ; // 線程池
062. ? ?
063. ???? private JTable viewTable = null ;
064. ? ?
065. ???? private int row = 0 ; // 任務(wù)編號
066. ? ?
067. ???? private String speed = null ; // 任務(wù)下載的速度
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()) // 入文件已下載完畢,則結(jié)束任務(wù)返回
084. ? ?
085. ??????????? return ;
086. ? ?
087. ??????? else
088. ? ?
089. ??????????? isStop = false ; // 否則,將isStop 置為false
090. ? ?
091. ?? ?
092. ? ?
093. ??????? tempFile = new File(fileInfo.getFilePath() + File.separator
094. ? ?
095. ?????????????? + fileInfo.getFileName() + ".info" );
096. ? ?
097. ??????? countThread = fileInfo.getConutThread(); // 分任務(wù)的數(shù)目
098. ? ?
099. ?? ?
100. ? ?
101. ??????? if (tempFile.exists()) { // 文件已存在,是續(xù)傳文件
102. ? ?
103. ??????????? isFirst = false ;
104. ? ?
105. ??????????? System.out.println( "文件已存在,是續(xù)傳文件" + 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( "網(wǎng)絡(luò)資源不正確!" );
122. ? ?
123. ?????????????? jp.createDialog( "提示信息" );
124. ? ?
125. ?????????????? return ;
126. ? ?
127. ??????????? }
128. ? ?
129. ??????????? fileInfo.setStartDate(Calendar.getInstance()); // 設(shè)置任務(wù)開始時間
130. ? ?
131. ??????????? fileInfo.setFileLength(fileLength); // 設(shè)置文件的長度
132. ? ?
133. ??????? }
134. ? ?
135. ??????? long tem = fileLength / countThread; // 每個分任務(wù)的長度
136. ? ?
137. ??????? if (isFirst) { // 若是第一次
138. ? ?
139. ??????????? for ( int i = 0 ; i < countThread; i++) {
140. ? ?
141. ?????????????? startPos[i] = i * tem; // 分任務(wù)開始位置
142. ? ?
143. ??????????? }
144. ? ?
145. ??????????? for ( int i = 0 ; i < countThread - 1 ; i++) {
146. ? ?
147. ?????????????? endPos[i] = startPos[i + 1 ]; // 分任務(wù)結(jié)束位置
148. ? ?
149. ??????????? }
150. ? ?
151. ??????????? endPos[countThread - 1 ] = fileLength;
152. ? ?
153. ??????????? for ( int i = 0 ; i < countThread; i++) { // 創(chuàng)建分任務(wù)
154. ? ?
155. ?????????????? /*
156. ? ?
157. ??????????????? * String path = fileInfo.getFilePath() + "http://" +
158. ? ?
159. ??????????????? * fileInfo.getFileName() + ".temp";
160. ? ?
161. ??????????????? */
162. ? ?
163. ?????????????? String path = fileInfo.getFilePath() + "http://"
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. ??????? // 執(zhí)行分任務(wù)
178. ? ?
179. ??????? for ( int i = 0 ; i < countThread; i++) {
180. ? ?
181. ??????????? // if(!splitTask[i].isOver())
182. ? ?
183. ??????????? executor.execute(splitTask[i]);
184. ? ?
185. ??????? }
186. ? ?
187. ??????? long tempLength = testFileLength(); // 測量文件已下載的長度
188. ? ?
189. ?? ?
190. ? ?
191. ??????? boolean flag = true ;
192. ? ?
193. ??????? // 等待子線程結(jié)束while循環(huán)
194. ? ?
195. ??????? while (!isStop) {
196. ? ?
197. ??????????? speed = MyControl.speed(tempLength, testFileLength(), 0 .5f); // 測量文件下載的速度
198. ? ?
199. ??????????? tempLength = testFileLength();
200. ? ?
201. ??????????? showViewTable(); // ////刷新任務(wù)欄
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 ); // 睡眠500毫秒
214. ? ?
215. ??????????? int i = 0 ;
216. ? ?
217. ??????????? for (; i < countThread; i++) {
218. ? ?
219. ?????????????? if (!splitTask[i].isStop()) { // 分任務(wù)沒有結(jié)束
220. ? ?
221. ?????????????????? break ;
margin-left: 1
分享到:
評論
15 樓 buyajun 2010-06-11??
又是 一 水貼
14 樓 hexl21 2010-03-31??
從別人那copy的吧
13 樓 TheNewBeginning 2010-03-31??
字體是小了點,但是用按住ctrl+滾輪 滾動可以調(diào)整字體的啊。
12 樓 yangdefeng95802 2010-03-30??
暈了,那有這樣的,服了
11 樓 scorpiomiracle 2010-03-30??
lz,厚道點啊,這也叫“查看源代碼”?
10 樓 qianlei007 2010-03-30??
眼睛呀! 不行了。。。
9 樓 liwenso 2010-03-30??
JE的問題吧,大家回復(fù)的字體也是相當(dāng)?shù)男。?
8 樓 yzsunlight 2010-03-30??
樓主似乎沒傳完 希望LZ 共享
7 樓 deyami 2010-03-30??
看代碼這東西應(yīng)該還沒做完吧?
6 樓 whaosoft 2010-03-30??
LZ 你賠我眼睛....
5 樓 zjshan 2010-03-30??
期待中、、、、、、
4 樓 xiaoyiz 2010-03-30??
看上去像是從哪里直接復(fù)制過來的~額的個神啊。。。
3 樓 luckylong221 2010-03-29??
這個字體看的很眼疼。。LZ能把整個文章改正一下么
2 樓 nothink 2010-03-29??
快點找上帝過來看啊。神才能看明白的格式
1 樓 soaring 2010-03-29??
這字體看著也太眼疼了……
lll360360
  • 瀏覽: 6687 次
  • 性別: Icon_minigender_1
  • 來自: 重慶
最近訪客 更多訪客>>
文章分類
社區(qū)版塊

Java斷點續(xù)傳實現(xiàn)資源文件下載軟件


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論