⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadsplitter.java

📁 一款JAVA开发的类迅雷的多线程下载系统,希望对大家有帮助
💻 JAVA
字号:
package downfile;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DownloadSplitter implements Runnable{
	
    URL dlURL;
    long startPos;
    long endPos;
    long downloaded;
    int threadID;
    int cishu;
    boolean done = false;
    boolean stop = false;
    boolean finish = false;
    RandomAccessFile file;
	int i=0;
	SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	Panel panel;
	public DownloadSplitter(URL dlURL,String saveAs,long nStart,
			long nEnd,int id,long downloaded,int cishu,Panel panel) throws FileNotFoundException{
		this.dlURL = dlURL;
		this.startPos = nStart;
		this.endPos = nEnd;
		this.downloaded = downloaded;
		threadID = id;
		this.cishu = cishu;
		this.panel = panel;
		try{
		   file = new RandomAccessFile(saveAs,"rw");
		   file.seek(startPos);
		} catch (IOException e) {
		}
		MainFrame.main.tabbedpane.addTab("线程"+(id+1),panel);
		downloadSplitter();
	}
	
	public void setStop(boolean stop){
		this.stop = stop;
	}
	
	public long getStartPos(){
		return startPos;
	}
	
	public void downloadSplitter(){
		Thread thread = new Thread(this);
		thread.start();
	}
	
	public void run(){
		Date date1;
		while(true){
			try{
				date1 = new Date();
				panel.list.append(formatter.format(date1)+": 开始连接......"+"\n");
				HttpURLConnection connection =
					(HttpURLConnection)dlURL.openConnection();
				String sProperty = "bytes="+startPos+"-";
				connection.setRequestProperty("RANGE",sProperty);
				connection.connect();
				date1 = new Date();
				panel.list.append(formatter.format(date1)+": 连接成功,开始下载文件......"+"\n");
				InputStream instream = connection.getInputStream();
				while(!stop && startPos < endPos){
					byte buffer[];
					int buffersize =(int)(endPos - startPos);
					if(buffersize > 1024){
						buffer = new byte[1024];
					}else {
						buffer = new byte[buffersize];
					}
					int read = instream.read(buffer);
					if(read == -1)
						break;
					file.write(buffer,0,read);
					startPos +=read;
					downloaded +=read;
				}
				date1 = new Date();
				panel.list.append(formatter.format(date1)+": 下载完成......"+"\n");
				done = true;
				file.close();	
				break;
			}catch(Exception e){	
				i++;
				if(startPos == endPos){
					done = true;
					try {
						file.close();
					} catch (IOException e1) {}
					date1 = new Date();
					panel.list.append(formatter.format(date1)+": 下载完成......"+"\n");
				}else{
				date1 = new Date();
				panel.list.append(formatter.format(date1)+": 第"+i+"次连接失败"+"\n");
			  }
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -