自己编写的文件下载器,仅用于网页中的文件下载

 

最近在学习struts2,见到网上有好多好的代码下载链接,大概有四十多个吧,挺多的,一个一个点的着实有点累,所以就编写了一个软件实现自动下载.用户输入一个要解析的页面地址、要下载的文件类型、文件保存的位置,本软件就可以实现自动的下载。

本软件只是用于交流学习,同时方便自己下载东西,纯属自己原创。软件中的验证性操作极少、采用控制台操作,只是为了减少内存开销。。。

软件及源代码下载地址:http://www.pudn.com/downloads442/sourcecode/java/117143192downFiels.rar

源代码

DownloadFiles.java

 

package dong.application.downloadFiles;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * 下载文件软件,我们浏览网页的时候,有些网页中有好多的文件下载链接,当然我们可以一个一个点击下载,
 * 或者用右键单击页面,选择用迅雷下载也是OK的,但是一个一个点击下载挺慢的,而且启动迅雷吧,还挺占
 * 用内存,毕竟迅雷的界面那么丰富(还插有小广告哦)。。。所以呢,本人就写了一个程序,专门用于下载网 页中的文件。
 * 郑重声明:此软件不是让你用来测试的(由于校验用户的操作会浪费一些时间和内存),所以呢,你在输入操 作的时候,要按照要求输入正确的格式。
 * 本软件操作简单,需要输入的参数有三个: <li>
 * 要解析的页面链接,例如:http://www.vaannila.com/struts-2/struts-2-
 * example/struts-2-example.html</li> <li>
 * 要下载的文件类型(注意,如果要下载多个文件类型,中间用英文逗号隔开),例如:zip,war</li> <li>
 * 文件的保存路径(路径可以不存在,但是盘符必须存在),例如:g:/wlzjdm</li>
 * 
 * 如果下载过程中需要终止,则可以通过任务管理器进行终止。
 * 
 * @author HS
 * 
 */
public class DownloadFiles
{
	/**
	 * 主函数
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception
	{
		// 构造一个下载文件的对象
		DownloadFiles download = new DownloadFiles();
		
		//显示欢迎页面
		download.welcome();
		
		// 读取用户的操作
		Scanner read = new Scanner(System.in);

		// 提示用户输入要解析的页面地址
		System.out.print("请输入要下载的资源所在的页面:");
		String url = read.nextLine();

		// 提示用户输入要下载的文件类型
		System.out.print("请输入要下载的资源的后缀信息,中间以英文逗号隔开,例如:zip,rar:");
		String fileSuffix = read.nextLine();

		// 提示用户输入文件的保存路径
		System.out.print("请输入下载文件的保存路径:");
		String savePath = read.nextLine();

		// 调整路径格式:[dir]/例如:g:/hs/
		if (!savePath.endsWith("/") || !savePath.endsWith("\\"))
		{
			savePath = savePath + "/";
		}

		File dir = new File(savePath);
		if (!dir.exists())
		{
			dir.mkdirs();
		}

		// 解析用户所给出的页面内容为DOM格式
		Document document = Jsoup.parse(new URL(url), 20000);

		// 获取页面中的链接元素
		Elements e = document.getElementsByAttribute("href");

		// 解析用户给出的页面所在的位置
		int position = url.lastIndexOf("/");
		url = url.substring(0, position);

		// 获取文件中符合要求的完整连接
		Set<String> urls = download.getDesFilesURL(e, fileSuffix, url);

		// 下载文件线程池
		ArrayList<Thread> threadPool = new ArrayList<Thread>();

		// 为每一个连接创建一个下载线程,并将该线程加入到线程池中
		for (String u : urls)
		{
			threadPool.add(new Thread(new DownloadThread(u, savePath)));
		}

		// 等待文件下载完成
		for (Thread thread : threadPool)
		{
			thread.join();
		}

		System.out.println("谢谢你的使用!QQ:1224829846");
	}

	/**
	 * 将所有的链接标签进行解析,获取要下载内容的完整连接
	 * 
	 * @param elements
	 *            链接标签
	 * @param fileSuffix
	 *            要下载的文件的后缀名
	 * @param baseURL
	 *            用户给出的URL在服务器端的目录
	 * @return 返回解析后的要下载的文件的绝对路径
	 */
	private Set<String> getDesFilesURL(Elements elements, String fileSuffix,
			String baseURL)
	{
		//存储要下载的文件的URL
		Set<String> filesURL = new TreeSet<String>();
		
		//要下载的文件的后缀名集合
		Set<String> fileSuffixs = new TreeSet<String>();

		//解析要下载的文件的后缀类型,并将其存储到集合中
		StringTokenizer st = new StringTokenizer(fileSuffix, ",");

		while (st.hasMoreElements())
		{
			fileSuffixs.add(st.nextToken());
		}

		//解析元素获取其绝对路径
		for (Element e : elements)
		{
			String url = e.attr("href");
			
			int position = url.lastIndexOf(".");
			
			if (position != -1)
			{
				//获取当前连接的文件类型
				String suffix = url.substring(position + 1);

				String fullURL = baseURL;
				
				//判断该类型是否是用户指定的类型
				if (fileSuffixs.contains(suffix))
				{
					//判断是否使用的是想对路径,如果是,则转换成绝对的路径
					while (url.startsWith("../"))
					{
						int pos = fullURL.lastIndexOf("/");
						fullURL = fullURL.substring(0, pos);
						url = url.substring(3);
					}
					fullURL = fullURL + "/" + url;
					filesURL.add(fullURL);
				}
			}
		}
		return filesURL;
	}
	
	/**
	 * 使用说明及版权声明
	 */
	private void welcome()
	{
		System.out.println("---------------------------------------------------------------------");
		System.out.println("***************************使用说明************************************");
		System.out.println("    本软件是通过解析用户所给的链接,并且按照用户所要求下载的文件类型进行文件下载。");
		System.out.println("    操作步骤就是按照提示的输入进行填写,下面给出一个例子:第一步,输入下载文件的路径:htt");
		System.out.println("p://www.vaannila.com/struts-2/struts-2-example/struts-2-example.html;");
		System.out.println("第二步:输入要下载的文件类型:zip,war;第三步:输入文件的保存路径:g:/wlzjdm");
		System.out.println("***************************版权声明************************************");
		System.out.println("    本软件版权归冯冬冬所有,仅用于学习交流。");
		System.out.println("---------------------------------------------------------------------");
	}
}

 

 DownloadThread.java

 

package dong.application.downloadFiles;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.URL;

/**
 * 下载文件线程,用户给一个要下载文件的链接,以及文件的存储路径,则该线程就会满足用户的要求
 * @author HS
 *
 */
public class DownloadThread extends Thread
{
	private String sourceURL;
	private String savePath;

	public DownloadThread(String sourceURL, String savePath)
	{
		this.sourceURL = sourceURL;
		
		this.savePath = savePath;
		
		this.start();
	}

	@Override
	public void run()
	{
		//主要是用来获取要下载的文件的文件名,当然也可以通过字符串解析
		File file = new File(sourceURL);
		String fileName = file.getName();

		try
		{
			//建立文件输出流
			System.out.println("satrt download:" + fileName);
			FileOutputStream fos = new FileOutputStream(new File(savePath
					+ fileName));

			//建立带有缓冲的输入流
			BufferedInputStream bin = new BufferedInputStream(
					new URL(sourceURL).openConnection().getInputStream());

			//将输入流中的内容写到输出流中
			int length = 0;
			byte[] buffer = new byte[51200];
			while ((length = bin.read(buffer)) != -1)
			{
				fos.write(buffer, 0, length);
				fos.flush();
			}
			fos.flush();
			fos.close();
			bin.close();
			System.out.println(fileName + " download finish");
		}
		catch (Exception e)
		{
			System.out.println(fileName + "文件下载失败!\t\t其网址为:" + sourceURL);
		}
	}

}

 操作过程:

 

---------------------------------------------------------------------

***************************使用说明************************************

    本软件是通过解析用户所给的链接,并且按照用户所要求下载的文件类型进行文件

    操作步骤就是按照提示的输入进行填写,下面给出一个例子:第一步,输入下载文

路径:htt

p://www.vaannila.com/struts-2/struts-2-example/struts-2-example.html;

第二步:输入要下载的文件类型:zip,war;第三步:输入文件的保存路径:g:/wlzjdm

***************************版权声明************************************

    本软件版权归冯冬冬所有,仅用于学习交流。

---------------------------------------------------------------------

请输入要下载的资源所在的页面:http://www.vaannila.com/struts-2/struts-2-exam

struts-2-example.html

请输入要下载的资源的后缀信息,中间以英文逗号隔开,例如:zip,rarzip,war

请输入下载文件的保存路径:g:/wlzjdm

谢谢你的使用!QQ1224829846

satrt download:Example1.zip

satrt download:Example3.zip

satrt download:Struts2Example9.zip

satrt download:Struts2Example2.zip

satrt download:Struts2Example7.war

satrt download:Struts2Example9.war

satrt download:Struts2Example17.zip

satrt download:Example2.zip

satrt download:Example4.zip

satrt download:Struts2Example1.zip

satrt download:Struts2Example11.zip

satrt download:Struts2Example13.zip

satrt download:Struts2Example15.zip

satrt download:Struts2Example18.zip

satrt download:Struts2Example5.zip

satrt download:Struts2Example7.zip

satrt download:Example2.zip

satrt download:Struts2Example2.war

satrt download:Struts2Example18.war

satrt download:Struts2Example15.war

satrt download:Struts2Example13.war

satrt download:Struts2Example11.war

satrt download:Struts2Example1.war

satrt download:Example4.zip

satrt download:Struts2Example8.zip

satrt download:Struts2Example6.zip

satrt download:Struts2Example4.zip

satrt download:Struts2Example19.zip

satrt download:Struts2Example14.zip

satrt download:Struts2Example12.zip

satrt download:Struts2Example10.zip

satrt download:Example5.zip

satrt download:Example3.zip

satrt download:Example1.zip

satrt download:Struts2Example8.war

satrt download:Struts2Example6.war

satrt download:Struts2Example4.war

satrt download:Struts2Example19.war

satrt download:Struts2Example17.war

satrt download:Struts2Example14.war

satrt download:Struts2Example12.war

satrt download:Struts2Example10.war

satrt download:Example5.zip

satrt download:Struts2Example5.war

Struts2Example9.zip download finish

Example4.zip download finish

Example2.zip download finish

Struts2Example2.zip download finish

Struts2Example1.zip download finish

Struts2Example17.zip download finish

Struts2Example11.zip download finish

Struts2Example5.zip download finish

Example1.zip download finish

Example3.zip download finish

Struts2Example18.zip download finish

Struts2Example13.zip download finish

Struts2Example15.zip download finish

Struts2Example12.zip download finish

Struts2Example10.zip download finish

Struts2Example14.zip download finish

Struts2Example19.zip download finish

Struts2Example6.zip download finish

Struts2Example7.zip download finish

Struts2Example8.zip download finish

Example5.zip download finish

Struts2Example4.zip download finish

 


下面有打包后的附件,其中里面包含有jre以及可执行的.exe文件。只需点击exe文件运行即可

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wlzjdm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值