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

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Java斷點續傳實現資源文件下載軟件

系統 1917 0

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

?

?

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

?

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

?

?

二、軟件功能介紹

?

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

?

本軟件的主要功能如下:

?

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

?

?

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

?

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

?

?

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

?

?

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

?

?

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

?

?

<!--[if !supportLists]--> 4. ??? <!--[endif]--> 任務續傳

?

?

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

?

?

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

?

?

從下載任務中刪除不符合條件的紀錄。

?

?

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

?

?

在視圖功能中可以顯示和隱藏工具欄、狀態欄

?

?

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

?

?

幫助中顯示軟件的作者,聯系方式等相關信息。

?

?

三、軟件核心代碼:

?

斷點續傳內核的實現主要用了 8 個類:

?

FileInfo.java ??????? 描述下載文件的詳細信息,下載文件的網絡地址 URL

?

FileTask.java ??????? 任務主線程,同時還描述任務的詳細信息

?

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

?

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

?

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

?

NewTask.java ???????? 新建任務界面

?

SplitFileTask.java ?? 分任務線程

?

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

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

?

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 ; // 任務文件信息
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 ; // 否則,將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. ??????????????? * 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. ??????? // 執行分任務
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. ??????? // 等待子線程結束while循環
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 ); // 睡眠500毫秒
214. ? ?
215. ??????????? int i = 0 ;
216. ? ?
217. ??????????? for (; i < countThread; i++) {
218. ? ?
219. ?????????????? if (!splitTask[i].isStop()) { // 分任務沒有結束
220. ? ?
221. ?????????????????? break ;
margin-left: 1
分享到:
評論
15 樓 buyajun 2010-06-11??
又是 一 水貼
14 樓 hexl21 2010-03-31??
從別人那copy的吧
13 樓 TheNewBeginning 2010-03-31??
字體是小了點,但是用按住ctrl+滾輪 滾動可以調整字體的啊。
12 樓 yangdefeng95802 2010-03-30??
暈了,那有這樣的,服了
11 樓 scorpiomiracle 2010-03-30??
lz,厚道點啊,這也叫“查看源代碼”?
10 樓 qianlei007 2010-03-30??
眼睛呀! 不行了。。。
9 樓 liwenso 2010-03-30??
JE的問題吧,大家回復的字體也是相當的??!
8 樓 yzsunlight 2010-03-30??
樓主似乎沒傳完 希望LZ 共享
7 樓 deyami 2010-03-30??
看代碼這東西應該還沒做完吧?
6 樓 whaosoft 2010-03-30??
LZ 你賠我眼睛....
5 樓 zjshan 2010-03-30??
期待中、、、、、、
4 樓 xiaoyiz 2010-03-30??
看上去像是從哪里直接復制過來的~額的個神啊。。。
3 樓 luckylong221 2010-03-29??
這個字體看的很眼疼。。LZ能把整個文章改正一下么
2 樓 nothink 2010-03-29??
快點找上帝過來看啊。神才能看明白的格式
1 樓 soaring 2010-03-29??
這字體看著也太眼疼了……
lll360360
  • 瀏覽: 6687 次
  • 性別: Icon_minigender_1
  • 來自: 重慶
最近訪客 更多訪客>>
文章分類
最新評論

Java斷點續傳實現資源文件下載軟件


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品99 | 色狠狠色狠狠综合天天 | 久综合色| 日韩在线无 | 免费观看性欧美大片无片 | 天天燥日日燥 | 午夜羞羞| 亚洲精品在线91 | 四虎网站在线观看 | 日韩在线亚洲 | 亚洲国产精品视频一区 | 在线视频中文字幕乱人伦 | 亚洲精品久久久久久中文字幕小说 | 国产日韩欧美中文字幕 | 日韩一区精品 | 日本久久久久久久 | 欧美一级黄色免费看 | 那里有毛片看 | 久久蜜桃av一区二区天堂 | 欧美一级www片免费观看 | 久久婷婷综合五月一区二区 | 欧美日韩一区二区三 | 欧美日韩一区二区在线 | 亚洲精品无码成人A片在线虐 | 亚洲欧美成人中文在线网站 | 偷偷狠狠的日日高清完整视频 | 狠狠干网 | 久久久91 | 亚洲成人一区二区三区 | 久久视屏这里只有精品6国产 | 九九九九精品视频在线播放 | 国产操片| 国产精品久久久久久久久久久搜索 | 波多野结衣中文字幕2022免费 | 久久久精品一区二区三区 | 国产一区二区亚洲 | 国产偷国产偷在线高清 | 色www 永久免费网站 | 五月天激情视频 | 亚洲情a成黄在线观看动 | 亚洲国产天堂久久精品网 |