📄 downfile.java
字号:
package MTdownload;
import java.awt.*;
import java.io.IOException;
import java.net.*;
import java.util.*;
public class DownFile implements Runnable{
String sURL;
String saveFileAs;
long fileLength;
String info = new String();
int nthread;
TextArea textarea = new TextArea();
long[] position;
long[] startPos;
long[] endPos;
DownFileSplitter[] downFileSplitter;
public DownFile(String sURL,String saveFileAs,
int nthread,TextArea textarea)
{
this.sURL=sURL;
this.saveFileAs=saveFileAs;
this.nthread=nthread;
this.textarea=textarea;
startPos = new long[nthread];
endPos = new long[nthread];
}
public void run()
{
info="目标文件:"+sURL;
System.out.println("\n"+info);
textarea.append(info);
info="文件另存为:"+saveFileAs;
System.out.println("\n"+info);
textarea.append("\n"+info);
fileLength=getFileSize();
if(fileLength==-1)
{
System.out.println("不可知的文件长度");
textarea.append("\n不可知的文件长度!请重试");
}
else if(fileLength==-2)
{
System.out.println("文件无法获取!");
textarea.append("\n文件无法获取!请重试");
}
else
{
System.out.println("length="+fileLength);
for(int i=0;i<startPos.length;i++)
{
startPos[i]=i*(fileLength/startPos.length);
}
for(int i=0;i<endPos.length-1;i++)
{
endPos[i]=(i+1)*(fileLength/endPos.length);
}
endPos[endPos.length-1]=fileLength;
for(int i=0;i<startPos.length;i++)
{
info="线程"+i+"下载的范围:"+startPos[i]+"---"+endPos[i];
System.out.println(info);
textarea.append("\n"+info);
}
downFileSplitter = new DownFileSplitter[startPos.length];
for(int i=0;i<startPos.length;i++)
{
downFileSplitter[i]=new DownFileSplitter(sURL,saveFileAs,startPos[i],endPos[i],i,textarea);
info="线程"+i+" 启动";
textarea.append("\n"+info);
downFileSplitter[i].start();
}
boolean breakwhile = false;
while(true)
{
try {
Thread.sleep(500);
for(int i=0;i<startPos.length;i++)
{
if(!downFileSplitter[i].done)
{
breakwhile = true;
break;
}
}
if(!breakwhile)
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("文件传输完毕!");
textarea.append("\n文件传输完毕!");
}
}
private long getFileSize()
{
int fileLength=-1;
try {
URL url = new URL(sURL);
HttpURLConnection connect = (HttpURLConnection) url.openConnection();
int responsecode = connect.getResponseCode();
if(responsecode>=400)
{
processErrorCode(responsecode);
return -2;
}
String sHeader;
for(int m=1;;m++)
{
sHeader=connect.getHeaderFieldKey(m);
if(sHeader!=null)
{
System.out.println("can run");
if(sHeader.equals("Content-Length"))
{
fileLength = Integer.parseInt(connect.getHeaderField(sHeader));
break;
}
}
else
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return fileLength;
}
private void processErrorCode(int nErrorCode)
{
System.out.println("Error Code:"+nErrorCode);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -