package javaFTPsocket;
import java.io.*;
import java.net.*;
public class SiteFileFetch extends Thread{
SiteInfoBean siteInfoBean=null;
long[] nStartPos;
long[] nEndPos;
FileSplitterFetch[] fileSplitterFetch;
long nFileLength;
boolean bFirst=true;
boolean bStop=false;
File tmpFile;
DataOutputStream output;
public SiteFileFetch(SiteInfoBean bean) throws IOException{
siteInfoBean=bean;
tmpFile=new File(bean.getsFilePath()+File.separator+bean.getsFildName()+".info");
if(tmpFile.exists()){
bFirst=false;
read_nPos();
}else {
nStartPos=new long[bean.getnSplitter()];
nEndPos=new long[bean.getnSplitter()];
}
}
public void run(){
try {
if(bFirst){
nFileLength=getFileSize();
if(nFileLength==-1){
System.err.println("File Length is not known!");
} else if (nFileLength==-2) {
System.err.println("File is not access!");
}else {
for (int i=0;i<nStartPos.length;i++){
nStartPos[i]=(long) (i*(nFileLength/nStartPos.length));
}
for (int i=0;i<nEndPos.length-1;i++){
nEndPos[i]=nStartPos[i+1];
}
nEndPos[nEndPos.length-1]=nFileLength;
}
}
fileSplitterFetch=new FileSplitterFetch[nStartPos.length];
for (int i=0;i<nStartPos.length;i++){
fileSplitterFetch[i]=new FileSplitterFetch(siteInfoBean.getsSiteURL(),siteInfoBean.getsFilePath()+File.separator+siteInfoBean.getsFildName(),nStartPos[i],nEndPos[i],i);
Utility.log("Thread"+i+",nStartPos="+nStartPos[i]+",nEndPos="+nEndPos[i]);
fileSplitterFetch[i].start();
}
boolean breakWhile=false;
while (!bStop){
write_nPos();
Utility.sleep(500);
breakWhile=true;
for (int i=0;i<nStartPos.length;i++){
if(!fileSplitterFetch[i].bDownOver){
breakWhile=false;
break;
}
}
if (breakWhile) break;
}
System.err.println("文件下载结束!");
}catch (Exception e){
e.printStackTrace();
}
}
public long getFileSize() {
int nFileLength=-1;
try{
URL url=new URL(siteInfoBean.getsSiteURL());
HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("User-Agent","NetFox");
int responseCode=httpURLConnection.getResponseCode();
if(responseCode>=400){
processErroorCode(responseCode);
return -2;
}
String sHeader;
for(int i=1;;i++){
sHeader=httpURLConnection.getHeaderFieldKey(i);
if(sHeader!=null){
if(sHeader.equals("Content-Length")){
nFileLength=Integer.parseInt(httpURLConnection.getHeaderField(sHeader));
break;
}
}else
break;
}
}catch (IOException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
Utility.log(nFileLength);
return nFileLength;
}
private void write_nPos(){
try {
output=new DataOutputStream(new FileOutputStream(tmpFile));
output.writeInt(nStartPos.length);
for (int i=0;i<nStartPos.length;i++){
output.writeLong(fileSplitterFetch[i].nStartPos);
output.writeLong(fileSplitterFetch[i].nEndPos);
}
output.close();
}catch (IOException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
private void read_nPos(){
try {
DataInputStream input=new DataInputStream(new FileInputStream(tmpFile));
int nCount=input.readInt();
nStartPos=new long[nCount];
nEndPos=new long[nCount];
for (int i=0;i<nStartPos.length;i++){
nStartPos[i]=input.readLong();
nEndPos[i]=input.readLong();
}
input.close();
}catch (IOException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
private void processErroorCode(int nErrorCode){
System.err.println("Error Code:"+nErrorCode);
}
public void siteStop(){
bStop=true;
for (int i=0;i<nStartPos.length;i++)
fileSplitterFetch[i].splitterStop();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java断点续传下载原神4.0版本
共6个文件
java:6个
需积分: 0 5 下载量 31 浏览量
2023-08-17
20:37:30
上传
评论
收藏 4KB ZIP 举报
温馨提示
java断点续传下载原神4.0版本
资源推荐
资源详情
资源评论
收起资源包目录
javaFTPsocket.zip (6个子文件)
javaFTPsocket
FileSplitterFetch.java 2KB
FileAccess.java 674B
Utility.java 419B
SiteInfoBean.java 1KB
TestMethod.java 535B
SiteFileFetch.java 5KB
共 6 条
- 1
资源评论
林子恩
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功