最近在学习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,rar:zip,war
请输入下载文件的保存路径:g:/wlzjdm
谢谢你的使用!QQ:1224829846
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文件运行即可
分享到:
相关推荐
编码器在您的 PC 上运行,用于导入和压缩字体文件。解码器在目标微控制器上运行,解压缩并渲染字符。 入门 下载库后,在根文件夹中运行make 。这将构建编码器,对一些示例字体进行编码,并构建一个render_bmp示例...
一个用 python 编写的“linux”,用于 CircuitPython 驱动的微控制器。 目录 先决条件 安装/更新 配置 联系 目录结构 贡献者 手动的 有用的资源 先决条件和可选硬件 取决于 circuitpython 7。(支持 7.0.0 - 7.3.0...
UOL Mais下载器使用Python编写的大量下载器,用于UOL Mais视频安装及使用方法应用程序上提供了安装教程,文档和使用示例。更新日志v0.3测试版RPC支持添加了Aria2的下载。 v0.2.2beta 此版本修复了一个简单的文件下载...
用于 AVR 微控制器的引导加载程序,具有 1024 字节的 EAX 模式加密(AES 底层) ...编写自己的上传器或使用提供的上传新固件到引导加载程序,协议很简单 更多详情、使用方法,请下载后阅读README.md文件
用于微控制器的 Swift 框架。SwiftIO 板提供了学习 Swift 代码的好方法。在 IDE 中编写代码,下载到您的电路板,如果您已连接电路,您将实时获得结果。 文档 只需调用 MadMachine IDE 中的相关类/方法,SwiftIO 库...
用 Python 编写的基于事件的回测器。回测器是使用消费者/生产者模式构建的,其中消费者是 Controller 类,生产者是 DataSource 类。交易算法包含在算法类中。 可以通过实例化 Portfolio 类并添加股票、价格和份额来...
HMC5883L I2C 器件库为 ARM 32 位 STM32F103xx 系列微控制器上的 HMC5883L I2C 器件提供简单直观的接口。它具有 I2C 位和字节级通信,可完全覆盖 HMC5883L 文档中描述...更多详情、使用方法,请下载后阅读README.md文件
生活中,我们需要使用大量的文件下载工具。迅雷X、QQ旋风、快车、电驴,它们都能够实现多任务、多线程下载。本次程序设计的首要任务是以Java作为唯一编程语言编写一个简易的下载器。具体要求如下: 下载器拥有...
其极其简单的规范使得自定义现有转换或编写自己的转换变得非常容易,而不是与复杂的 ffmpeg 过滤器图作斗争。 这个库是一个 ffmpeg 扩展,可以很容易地在 ffmpeg 过滤器图中使用 gl-transitions。 更多详情、使用...
它是用 C 编写的,并提供了熟悉的类似 POSIX 的文件系统 API,使其易于在您的应用程序中使用;如果您的应用程序有简单的存储需求,则可以使用替代的极简 API。Reliance Edge 具有高度可配置性,可以根据您的应用程序...
SSD1306-AVR SSD1306-AVR 是一个 C++ 库,用于使用 SSD1306、128x64、单色 OLED 显示器。目前仅支持 I2C 版本的显示器。 显示器的 I2C 地址在 SSD1306.h 中设置: ...更多详情、使用方法,请下载后阅读README.md文件
用于 8 位微控制器的非常小的 ECDH 和 ECDSA 实现。 基于 kmackay 的 micro-ecc,用于 32 位微控制器的小型 ECDH 和 ECDSA 实现 特征 抵抗已知的侧信道攻击。...更多详情、使用方法,请下载后阅读README.md文件
icojpeg 是一个公共领域的JPEG解压缩器,用纯 C 语言编写在单个源文件picojpeg.c和单个标头picojpeg.h中。它有几个相当独特的属性,使其在小型 8/16 位嵌入式设备或内存非常有限的环境中非常有用: 针对最小内存...
用于微控制器的轻量级链表类型队列实现。编写为 C++ 模板类。 如何使用 在代码中包含头文件: #include 然后根据需要创建队列,示例: 要创建一个int队列,能够容纳 20 个项目: ArduinoQueue<int> intQueue(20)...
用于 Atmels ATTiny 微控制器的复合主从 I2C 库 用于 ATtiny 上用于 I2C 通信的新组合 TinyWire 库的类 完整的库基于 TinyWireM 和 TinyWireS 库,最初由 BroHogan 发布,然后由 jkl 修改。我重新编写了他们的代码以...
海康录下的文件是mp4格式,本程序是使用DELPHI编写的简单播放器,可以用于二次开发的参考。
Go Collector 是一个运行时指标收集器、代码执行跟踪器和分析器,用于用 Go 编写的应用程序和服务。该模块是Instana APM 解决方案的一部分。 Go 收集器需要 Go 版本 1.9 或更高版本。 安装 要将 Instana Go ...
与大多数其他受限设备的数据流运行时不同,MicroFlo在微控制器上独立运行,可以在运行时进行自省和重新配置,并内置对自动化测试的支持。 可以使用 MicroFlo 编程: ...更多详情、使用方法,请下载后阅读README.md文件
tagutil(1)是一个用于编辑音乐文件标签的 CLI 工具。它旨在提供易于编写脚本的界面和易于交互使用。与大多数其他标签工具不同,它完全支持ogg/vorbis 文件和 FLAC 的Vorbis 注释。Vorbis 注释很性感,因为您可以使用...
gui - 微控制器的 GUI 工具包 警告 fgui 是 pre-alpha 软件。 fgui 是一个用 C 语言编写的小型 GUI 工具包。它设计用于在非常小的嵌入式系统上运行,即 8 位微控制器...更多详情、使用方法,请下载后阅读README.md文件