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

📄 downloadinfo.java

📁 用Java开发的多线程下载工具
💻 JAVA
字号:
package download;

/**
 *功能:下载文件信息的实体类
 */
import java.net.*;
import java.io.*;
import java.util.HashMap;

public class DownLoadInfo implements Serializable
{
	private String saveFileName;// 下载文件名

	private String downURL;// 下载文件资源名称

	private TestResult tr; // 资源连接结果

	private int threadNum; // 线程数目

	private boolean isValidate;// 该下载信息受否有效

	private long perdownLength;// 上次文件下载长度

	private long downLength;// 当前文件已下载长度

	private float downSpeed;// 下载速度

	private long[][] downPos;// 各个线程下载指针

	private boolean finished;// 文件下载完毕标志

	private boolean err;// 文件是否下载出错,

	/**
	 * 构造函数
	 * 
	 *  1、urlStr资源地址;2、saveFileName下载文件保存路径;3、num所开下载线程数目
	 */
	public DownLoadInfo(String urlStr, String saveFileName, int num)
	{
		tr = DownLoadUtil.TestURL(urlStr);
		if ((tr.myResult == 1) && (tr.fileLength > 0)
				&& setSaveFile(saveFileName))
		{
			downURL = urlStr;
			isValidate = true;
			setThreadNum(3);
			setDownPos();
		}
		else
		{
			isValidate = false;
		}
	}

	/**
	 * 功能:获取下载资源名称 返回类型:String
	 */
	public String getDownURL()
	{
		return downURL;
	}

	/**
	 * 功能:获取保存文件名称 返回类型:String
	 */
	public String getSaveFileName()
	{
		return saveFileName;
	}

	/**
	 * 功能:设置文件名称。设置成功返回true,否则返回false 返回类型:boolean
	 */
	public boolean setSaveFile(String saveFileName)
	{
		File tmp_File = new File(saveFileName);
		try
		{
			RandomAccessFile out = new RandomAccessFile(tmp_File, "rw");
			out.setLength(tr.fileLength);
			out.close();
			this.saveFileName = saveFileName;
			return true;
		}
		catch (IOException e)
		{
			return false;
		}
	}

	/**
	 * 功能:返回下载线程数目 返回类型:int
	 */
	public int getThreadNum()
	{
		return threadNum;
	}

	/**
	 * 功能:设置下载线程数目。1-10之间的整数,如果超出范围,则强行设置为3 返回类型:boolean
	 */
	private void setThreadNum(int num)
	{
		if (!isValidate)
		{
			return;
		}
		if (tr.fileName.equals(""))
		{
			threadNum = 1;
			return;
		}
		if ((num <= 0) || (num > 10))
		{
			threadNum = 3;
		}
		else
		{
			threadNum = num;
		}
	}

	/**
	 * 功能:获取下载信息是否有效 返回类型:boolean
	 */
	public boolean getIsValidate()
	{
		return isValidate;
	}

	/**
	 * 功能:获取下载文件长度 返回类型:long
	 */
	public long getFileLength()
	{

		return tr.fileLength;
	}

	/**
	 * 功能:获取下载文件名 返回类型:String
	 */
	public String getFileName()
	{
		return tr.fileName;
	}

	/**
	 * 功能:获取资源连接的MIME信息 返回类型:Map<String,String>
	 */
	public HashMap<String, String> getMIME()
	{
		return tr.http_MIME;
	}

	/**
	 * 功能:获取文件下载长度 返回类型:long
	 */
	public long getDownLength()
	{
		return downLength;
	}

	/**
	 * 功能:设置文件下载长度
	 */
	public void setDownLength(long len)
	{
		downLength = downLength + len;
	}

	/**
	 * 功能:获取文件下载速度 返回类型:float
	 */
	public float getDownSpeed()
	{
		return downSpeed;
	}

	/**
	 * 功能:计算文件下载速度 返回类型:Map<String,String>
	 */
	public void setDownSpeed()
	{
		downSpeed = (downLength - perdownLength) / 1024.0f;
		perdownLength = downLength;
		downSpeed = Math.round(downSpeed * 100) / 100.0f;
	}

	/**
	 * 功能:获取文件下载进度 返回类型:Map<String,String>
	 */
	public int getDownProgress()
	{
		return Math.round(100.0f * this.getDownLength() / this.getFileLength());
	}

	/**
	 * 功能:获取文件下载线程进度信息 返回类型:long[][]
	 */
	public long[][] getDownPos()
	{
		return downPos;
	}

	/**
	 * 功能:设置文件线程下载进度信息
	 */
	private void setDownPos()
	{
		downPos = new long[threadNum][2];
		long len = tr.fileLength;
		long block = (len / threadNum + 1);
		for (int i = 0; i < threadNum; i++)
		{
			len = len - block;
			downPos[i][0] = i * block;
			downPos[i][1] = block;
			if (len < 0)
				downPos[i][1] = block + len;
		}
	}

	/**
	 * 功能:获取文件是否下载结束信息 返回类型:boolean
	 */
	public boolean isFinished()
	{
		return finished;
	}

	/**
	 * 功能:设置文件是否下载结束标志
	 */
	public void setFinished(boolean f)
	{
		finished = f;
	}

	/**
	 * 功能:获取文件是否下载错误信息 返回类型:boolean
	 */
	public boolean isError()
	{
		return err;
	}

	/**
	 * 功能:设置文件是否下载错误标志
	 */
	public void setError(boolean e)
	{
		err = e;
	}

	/*
	 * 功能: 重写toString方法
	 */
	public String toString()
	{
		return saveFileName;
	}
}

⌨️ 快捷键说明

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