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

📄 downfile.java

📁 比较简单的一个java网络编程程序
💻 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 + -