`
wlzjdm
  • 浏览: 26324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

 

最近在学习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文件运行即可

 

分享到:
评论

相关推荐

    AutoDown_网页文件下载_自动下载网页文件_

    综合以上信息,我们可以构建一个基础的自动化网页文件下载器的概念,它利用Python的网络和文件处理能力,结合定时任务,实现高效且灵活的网页资源下载。对于初学者来说,这是一个很好的实践项目,可以深入理解网络...

    java编写的文件下载管理器Manager代码

    Java编写的文件下载管理器Manager代码是一个用于处理文件下载任务的程序,它允许用户管理和控制他们的下载过程。在Java编程语言中,实现这样的管理器通常涉及到多线程、网络I/O以及文件操作等多个核心概念。 1. **...

    c#编写的文件下载器源码

    本篇文章将详细解析一个基于C#编写的文件下载器源码,帮助初学者及开发者深入理解其工作原理,提升对C#编程和.NET框架的理解。 首先,让我们了解一下这个项目的结构。从提供的压缩包文件列表来看,包含了`Windows...

    网上文件下载器

    【网上文件下载器】是一种应用程序,它允许用户从互联网上获取并保存文件到本地计算机。在本项目中,我们关注的是一个用C#语言编写的简单版本,它提供了下载管理和进度显示的功能。C#是一种广泛使用的面向对象的编程...

    ZIP文件下载器

    本篇文章将详细探讨“ZIP文件下载器”,它是一款基于MASM32语言编写的工具类软件,专门用于下载和处理ZIP格式的压缩文件。 首先,我们要了解MASM32,全称为Microsoft Macro Assembler for 32-bit Windows,是微软...

    Http/ftp 文件下载器

    4. 错误处理:文件下载器会监测下载过程中的错误,如网络中断、服务器响应错误等,并尝试重试或恢复。 三、文件下载器的实现技术 1. URL解析:下载器需要解析Http或ftp URL,提取出服务器地址、端口、文件路径等...

    C#编写的下载器

    总的来说,C#编写的下载器结合了C#的强大特性和易用的WinForm界面库,为用户提供了一个简单但功能齐全的文件下载工具。通过深入理解和运用这些技术,开发者可以创建出更加高级和定制化的下载应用,满足不同用户的...

    易语言源码批量文件下载.7z

    在“易语言源码批量文件下载.7z”这个压缩包中,我们可以推测这是一组与易语言相关的源代码文件,用于实现批量下载功能。批量下载通常涉及到网络编程,可能是通过HTTP、FTP或其他协议来实现文件的批量获取。易语言...

    jsp编写的下载器代码

    在NetBeans中创建JSP文件,可以直接在IDE内编写和测试下载器代码。 5. **安全考虑**: 实现下载功能时,必须注意安全性。避免暴露敏感文件路径,防止目录遍历攻击,以及确保只有授权用户能下载特定文件。这可能...

    用VB编写的下载器的源码

    此外,如果这个下载器用于软件升级,那么可能包含版本检查和自动更新的功能。VB可以通过XMLHttpRequest对象或者WebClient类来获取远程服务器上的版本信息文件,比较当前软件版本与服务器上最新的版本号,若发现有...

    java 编写的http下载器 源代码

    Java编写的HTTP下载器源代码提供了对网络资源的高效、灵活下载功能,尤其适用于大文件的下载场景。这个下载器不依赖任何图形用户界面(GUI),而是通过命令行或者控制台进行交互,使得它更适合集成到自动化脚本或...

    用mfc编写的ftp下载器

    在这个MFC编写的FTP下载器实例教程中,我们将探讨如何利用MFC库和FTP协议来开发一个简单的文件下载工具。 FTP协议是互联网上广泛使用的文件传输协议,它允许用户从FTP服务器获取或上传文件。FTP基于TCP/IP协议族,...

    java编写的迅雷下载器

    【Java编写的迅雷下载器】是一款基于Java编程语言实现的下载工具,它在功能上模仿了著名的迅雷下载器,提供了相似的用户界面和强大的下载能力。通过使用Java进行开发,这款开源软件展现了Java在网络编程领域的应用...

    这是一个用C语言编写Linux平台的http文件下载器, 以命令行的方式运行.zip

    在本项目中,我们关注的是一个使用C语言在Linux环境下编写的命令行HTTP文件下载器。这个工具使得用户可以通过简单的命令行参数与交互方式来下载HTTP协议提供的远程文件。下面我们将详细探讨C语言编程、Linux环境、...

    秋秋网页下载器

    接下来是"秋秋网页下载器3.3.exe",这是秋秋网页下载器的可执行文件,用于在用户的计算机上安装和运行该软件。用户需要双击这个文件来启动安装程序,按照向导提示进行安装。在安装过程中,用户可以选择安装路径、...

    精密星历 广播星历 igs站文件自动下载器.zip

    在这个场景中,MATLAB被用来编写一个自动下载器,它可以简化从IGS站获取精密星历和广播星历的过程。利用MATLAB编程,用户可以避免手动打开网页和执行复杂的下载步骤,只需运行特定的脚本,就可以自动化地完成文件的...

    web资源下载器

    【web资源下载器】是一个基于Python编程语言编写的实用工具,其主要功能是帮助用户方便地下载网页中的特定类型资源,如PDF、TXT和PPT等。这个脚本的运用场景广泛,包括学术研究、资料收集、在线课程的学习资料下载等...

    C# 编写的资源下载器 支持网络爬虫

    本项目是一个基于C#的资源下载器,它不仅具备基础的文件下载功能,还集成了网络爬虫技术,能够深入挖掘并下载整个网站的内容。下面我们将详细探讨这个项目的相关知识点。 首先,我们要理解“资源下载器”的核心功能...

    Web Api 通过文件流 下载文件到本地实例

    通过分析这个项目,你可以看到如何在`Controllers`目录下的某个控制器类中实现文件下载的方法,以及如何配置路由来确保客户端可以通过正确的URL访问这个服务。你还可以学习到如何在`Global.asax.cs`或`Startup.cs`中...

Global site tag (gtag.js) - Google Analytics