`
0428loveyu
  • 浏览: 30904 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

用Java批量下载PDF

 
阅读更多

Internet当中有着无数的标准和规范,其中IETF(因特网工程任务组)中的RFC就达到几千个http://ietfreport.isoc.org/rfc/PDF/,包括http协议,uri等等。最近学习时常常看到参考书上提到各种RFC,每次下载实在有些麻烦,正好在学习相关内容,于是就写了个程序将官网上六千多个pdf文档下载下来。在这里跟大家分享。


整体思路:

首先从RFC列表的页面(http://ietfreport.isoc.org/rfc/PDF/)中解析出各个RFC文件的名称(这其中用到了正则表达式),存放在一个String数组中。
然后遍历整个数组,在遍历的过程当中,用apache的common.io包中的FileUtils.copyURLtoFile()方法(关于common io项目,请参考官网,具体地址在文章末尾)从网上下载pdf并保存到RFC目录下。

代码中也许还有许多优化的地方,欢迎各位指正。

源代码

整个程序源码如下:

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.io.FileUtils;

/**
 * Downloads RFCs
 * 
 * @author bingduanLin
 * 
 */
public class DownloadPdfs {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String url = "http://ietfreport.isoc.org/rfc/PDF";
		String[] list = readList(url);
		System.out.println("开始下载,请耐心等待");
		for (String u : list) {
			String source = url + "/" + u;
			String des = "RFC" + File.separator + u;
			downloadAndSave(source, des);
		}
		System.out.println("恭喜你,全部下载成功!");
		

	}

	/**
	 * 从网页中读取文件名列表
	 * 
	 * @param urlString
	 * @return
	 */
	public static String[] readList(String urlString) {

		String[] lists = new String[6734];
		try {
			URL url = new URL(urlString);
			Scanner scanner = new Scanner(url.openStream());
			int i = 0;
			int up = 6960; // 226
			while (scanner.hasNextLine() && i < up) {
				String line = scanner.nextLine();
				if (i >= 226) {
					lists[i - 226] = dealString(line);
				}
				i++;
			}
			scanner.close();
		} catch (MalformedURLException e) {
			System.out.println("URL格式出错,请检查");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(lists[0]);
		System.out.println(lists[6733]);
		return lists;

	}

	/**
	 * 从网页的<li>元素中提取文件名
	 * 
	 * @param source
	 *            待处理的<li>元素
	 * @return 处理后的文件名
	 */
	public static String dealString(String source) {
		String string = source;
		String result = string;
		String patterString = ">\\s.+.pdf";
		Pattern pattern = Pattern.compile(patterString);
		Matcher macher = pattern.matcher(string);
		while (macher.find()) {
			int start = macher.start();
			int end = macher.end();
			result = string.substring(start, end);
		}
		result = result.substring(2, result.length());
		return result;
	}

	/**
	 * @param source
	 *            the url of PDF to be downloaded
	 * @param destination
	 *            the destination to be saved
	 */
	public static void downloadAndSave(String source, String destination) {
		try {
			URL url = new URL(source); // "http://ietfreport.isoc.org/rfc/PDF/rfc1341.pdf");
			File file = new File(destination); // "rfc1341.pdf");
			FileUtils.copyURLToFile(url, file);
			System.out.println(source + "下载完成");
		} catch (MalformedURLException e) {
			System.out.println("URL格式出错,请检查");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("I/O 错误");
			e.printStackTrace();
		}
	}

}



说明:


下载几千个文件需要花个几分钟,程序中不少地方都是硬编码,欢迎各位给出优化方案。

如果IETF网站中的页面发生变化,需要修改代码方可运行。

参考资料:

1. StackOverFlow中的几个讨论:



2. Apache Common IO :


原创作品,转载请务必注明出处。
分享到:
评论

相关推荐

    java 打印pdf文件 也可批量打印

    ##### 4.2 Java批量打印实现 ```java public static void batchPrintPdfs(List&lt;String&gt; pdfPaths) { for (String path : pdfPaths) { if (!printPdf(path)) { System.out.println("打印失败: " + path); } else...

    批量打包下载pdf文件,多sheet页导出excel

    本主题聚焦于两个特定的操作:批量打包下载PDF文件和将多sheet页的Excel工作簿导出。这两个功能在数据分析、文档管理和自动化流程中尤为常见。 首先,批量打包下载PDF文件是一种常见的需求,特别是在处理大量报告、...

    Java实现FTP批量大文件上传下载.pdf

    在Java中实现FTP批量大文件上传下载也可以使用Java Applet。Java Applet可以在浏览器中运行,提供了一个基于Web的FTP客户端。使用Java Applet可以实现批量大文件上传下载,并提供了断点续传、进度条等功能。 四、...

    java+pdf生成.zip

    Flying Saucer则是一个将HTML转换为PDF的库,如果你的页面设计已经用HTML完成,那么使用Flying Saucer可以方便地将其转换为PDF。以下是一个使用Flying Saucer的例子: ```java import org.xhtmlrenderer.pdf....

    跨域在线批量展示pdf并且批量打印pdf

    在Servlet中,可以使用Apache PDFBox或者iText等Java库来读取和处理PDF文件。需要注意的是,服务器需要正确配置CORS策略,允许前端的跨域请求。 在这个过程中,前端和后端的交互通常遵循RESTful API设计原则,使用...

    java创建和解析PDF

    首先,我们来看如何使用Java创建PDF文件。通常,我们可以借助Apache PDFBox、iText或 Flying Saucer 这样的第三方库。以Apache PDFBox为例,它提供了丰富的API用于创建PDF文档。以下是一个简单的创建PDF文件的步骤:...

    Java+PDF批量压缩图片格式的PDF档(源码Demo)

    Java批量压缩图片格式的PDF档(源码Demo) 适用:仅针对纯图片型的pdf(类似扫描版)进行压缩 原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├...

    Java程序批量生成二维码EPS、CSV、PDF矢量图和各种格式二维码

    面向开发人员,和经常接触使用各种二维码的人,这个工具能帮助开发二维码的人员生成各种格式二维码,包括png,jpg,bpm,gif,SVG(矢量),EPS(矢量),PDF(矢量),并且能够调用电脑的摄像头扫描二维码,将码...

    java实现文件批量上传

    在Java开发中,文件批量上传是一项常见的功能,尤其在企业级应用中,用户可能需要上传大量数据或文件。本教程将介绍如何利用SWF(Simple Workflow)和EXT库来实现这一功能。SWF是一个用于创建富互联网应用程序的前端...

    java ceb转pdf demo

    为了实现一个完整的Java CEB转PDF解决方案,除了上述代码之外,还需要考虑错误处理、多线程支持、批量转换等功能。同时,确保转换后的PDF可以正确建立全文索引,可能需要对生成的PDF进行额外的处理,例如提取文本并...

    批量打印(java)

    使用它,我们可以在服务器端生成PDF,然后提供给用户下载或直接发送到打印机。以下是一个简单的示例代码: ```java ITextRenderer renderer = new ITextRenderer(); renderer.setDocumentFromString(htmlContent); ...

    批量word转pdf wordToPdf.zip

    标题提到的"批量word转pdf wordToPdf.zip"是一个解决方案,它使用Java AWT库来批量将Word文档转换为PDF格式。这个压缩包包含了必要的代码和脚本来实现这一功能。 首先,让我们了解Java AWT(Abstract Window ...

    java导出excel pdf 报表

    本文将深入探讨如何使用Java实现这一功能,包括处理Excel和PDF的库、基本操作以及优化技巧。 首先,Java中常用的库有Apache POI用于处理Excel,iText或Apache FOP用于处理PDF。Apache POI是Java API,专门用于读写...

    批量图片转双层PDF工具

    标题中的“批量图片转双层PDF工具”是指一种软件或应用程序,它的主要功能是将大量的图像文件(如TIF、JPG格式)转换为双层PDF文档。在PDF领域,"双层"通常指的是包含可搜索和可选择的文本层以及原始图像层的PDF文件...

    Java窗体程序批量生成二维码EPS、CSV、PDF矢量图和各种格式二维码图片

    面向开发人员,和经常接触使用各种二维码的人,这个工具能帮助开发二维码的人员生成各种格式二维码,包括png,jpg,bpm,gif,SVG(矢量),EPS(矢量),PDF(矢量),并且能够调用电脑的摄像头扫描二维码,将码...

    Java将PDF生成图片

    1. **PDF处理库**:在Java中,我们可以使用第三方库如Apache PDFBox、iText和PDF Clown等来处理PDF文档。这些库提供了丰富的API,用于读取、解析和操作PDF文件。 2. **图像渲染**:将PDF转换为图片的关键是渲染PDF...

    java office转pdf工具类

    综上所述,使用Aspose for Java,你可以轻松地将Office文档转换为PDF,但需要正确配置jar包依赖,处理认证文件,并根据项目需求选择合适的转换策略。记得定期更新Aspose库以获取最新的特性和修复。

    adobe pdf编辑器 java利用itextpdf根据模板导出pdf配套资源

    8. **使用Adobe PDF编辑器验证**:生成的PDF可以用Adobe Acrobat DC 2020 SP打开并检查内容是否正确填充。 此外,iTextPDF还支持更复杂的功能,比如添加水印、创建复杂的表格、处理图像和签名验证等。开发者可以...

    JAVA 写的批量pdf转换工具,图片处理工具,包括修改jpg分辨率,去扫描件黑边等工具集合,图形界面,主程序已编译为.exe格式,方便运行。

    java swing 采用C/S架构编写的工具集合,包括pdf转换jpg,jpg转pdf,Excel转pdf,合并pdf,批量创建文件夹,根据文件名称创建文件夹,文件批量重命名,根据文件名称移动文件到文件夹,扫描件去黑边,修改jpg图片的...

    java线程池实现批量下载文件

    Java线程池实现批量下载文件是指使用Java语言和线程池机制来实现批量下载文件的功能。这种方法可以大幅提高下载速度和效率,特别是当需要下载大量文件时。下面将对Java线程池实现批量下载文件的原理和实现进行详细...

Global site tag (gtag.js) - Google Analytics