`
我是温浩然
  • 浏览: 104179 次
文章分类
社区版块
存档分类
最新评论

技术改变生活

 
阅读更多

数据部的同事,需要 从网上下载 pdf 文件。

给定文件夹,其中包含若干个 txt 文件, txt 文件内容,每行 均 为一个 链接,点击链接会 直接下载 pdf 文件。

需要,在

1、总文件夹 下 按照 txt 文件名称 创建文件夹,

2、对应 txt 文件中的所有 链接 ,均下载到对应 txt 名称 的文件夹 下。

3、将所有 pdf 文件,按照下载 顺序 和 页数 进行重命名,命名 规则为 , 1-7.pdf 8-15.pdf 。


现存问题:

1、pdf 下载后,根据页码 重命名,顺序不正确会导致 命名 顺序打乱 导致 命名出错。

2、错误: 文件名称,不能包含 上标,下标,等特殊符号,包含特殊符号,会进行 html 转码,则导致创建文件失败。


完整代码如下:

刚开始上传的第一版,报错后不能继续下载,现在,报错后,可以继续下载后面的url 。

错误日志,输出到 txt 目录下,生成 log.txt文件。

package cn.digitalpublishing;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;

import com.lowagie.text.pdf.PdfReader;

/**
 * 
 * @author www.wswhr.com
 * @see http://blog.csdn.net/u012246342/article/details/60139990  
 *
 *现存问题:
 *	1、pdf 下载后,根据页码 重命名,顺序不正确会导致 命名 顺序打乱 导致 命名出错。
 *
 *注:
 *	pdf 文件下载后,重命名问题 : 需要导入 com.lowagie.text.pdf.PdfReader  jar 包。
 */
public class Snippet {

	public static void main(String[] args) {
		
		/**
		 * 错误: 文件名称,不能包含 上标,下标,等特殊符号,包含特殊符号,会进行 html 转码,则导致创建文件失败。
		 * 衍生化技术用于生物基质中性激素LC-MS<i><sup>n<\sup><\i>检测的进展.pdf 
		 */
		System.out.println("程序开始。");
		createDir("W://download//pdf//pdfRename");

		downloadFile("W://download//pdf//pdfRename");
		
		// fileRename("W://download//pdf//pdfRename");// pdf 文件的目录
		
		System.out.println("程序结束");
	}
	
	public static void errorLog(String logFilePath,String logInfo){
		FileWriter fw = null;
		PrintWriter pw = null;
		
		try {
			// 如果文件存在,则追加内容;如果文件不存在,则创建文件
			File f = new File(logFilePath + "\\log.txt");
			fw = new FileWriter(f, true);
			pw = new PrintWriter(fw);
			pw.println(logInfo);
			pw.flush();
			fw.flush();
			pw.close();
			fw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void createDir(String filePath) {
		try {
			File dir = new File(filePath);
			String[] filelist = dir.list();
			for (int i = 0; i < filelist.length; i++) {
				File readfile = new File(filePath + "\\" + filelist[i]);
				if (readfile.isDirectory() && readfile.exists()) {// 判断当前 txt 是否已经创建同名 文件夹
					errorLog(filePath, "创建目录失败,目标目录已存在!");
				} else {
					File fileDir = new File(readfile.getPath().substring(0,
							readfile.getPath().lastIndexOf('.')));
					fileDir.mkdirs();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void downloadFile(String txtFilePath) {
		try {
			File readerPath = new File(txtFilePath);
			String[] filelist = readerPath.list();

			for (int i = 0; i < filelist.length; i++) {
				File isDir = new File(txtFilePath + "\\" + filelist[i]);
				if(!isDir.isDirectory()){
					errorLog(txtFilePath, "******************开始下载:" + isDir.getName() + "文件*******************");
					FileReader reader = new FileReader(txtFilePath + "\\" + filelist[i]);

					BufferedReader br = new BufferedReader(reader);
					String str = null;
					String decodeFName = "";
					int num = 1;
					while ((str = br.readLine()) != null) {
						URL url = new URL(str);
						HttpURLConnection conn = (HttpURLConnection) url.openConnection();
						conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
						conn.setConnectTimeout(30000);  
						conn.setReadTimeout(30000);  
						String fileName = conn.getHeaderField("Content-Disposition").substring(20);
						decodeFName = URLDecoder.decode(fileName, "utf-8");

						String savePath = txtFilePath + "//" + isDir.getName().substring(0,isDir.getName().lastIndexOf('.'));
						downLoadFromUrl(txtFilePath,isDir.getName(),num,str, num+decodeFName, savePath);
						num++;
					}
					errorLog(txtFilePath, "××××××××××××××××××××"+isDir.getName()  + "文件 下载完成×××××××××××××××××××");
					br.close();
					reader.close();
				}
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void fileRename(String renameFilePath) {
		try {
			File file = new File(renameFilePath);

			String[] filelist = file.list();

			int pageNum = 0;
			for (int i = 0; i < filelist.length; i++) {
				File readfile = new File(renameFilePath + "\\" + filelist[i]);

				PdfReader reader = new PdfReader(readfile.getPath());
				int home, end;
				int page = reader.getNumberOfPages();
				System.err.println(page);
				if (pageNum == 0) {
					home = 1;
					end = page;
				} else {
					home = pageNum;
					end = pageNum + page;
				}
				// System.out.println("path=" + readfile.getPath());
				// System.out.println("absolutepath=" +
				// readfile.getAbsolutePath());
				// System.out.println("name=" + readfile.getName());
				String fileName = home + "-" + end + ".pdf";
				File renameFile = new File(fileName);
				readfile.renameTo(renameFile);
				pageNum = pageNum + page + 1;
			}
		} catch (Exception e) {

		}
	}

	/**
	 * 从网络Url中下载文件
	 * 
	 * @param urlStr
	 * @param fileName
	 * @param savePath
	 * @throws IOException
	 */
	public static void downLoadFromUrl(String homePath,String urlFileName,int errorNum,String urlStr, String fileName,String savePath) throws IOException {
		try {
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			// 设置超时间为3秒
			conn.setConnectTimeout(3 * 1000);
			// 防止屏蔽程序抓取而返回403错误
			conn.setRequestProperty("User-Agent",
					"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
			// 得到输入流
			InputStream inputStream = conn.getInputStream();
			// 获取自己数组
			byte[] getData = readInputStream(inputStream);
			// 文件保存位置
			File saveDir = new File(savePath);
			if (!saveDir.exists()) {
				saveDir.mkdir();
			}
			File file = new File(saveDir + File.separator + fileName);
			FileOutputStream fos = new FileOutputStream(file);
			fos.write(getData);
			if (fos != null) {
				fos.close();
			}
			if (inputStream != null) {
				inputStream.close();
			}
			String fileGetName = conn.getHeaderField("Content-Disposition")
					.substring(20);
			String fileSaveName = URLDecoder.decode(fileGetName, "utf-8");
			errorLog(homePath, "信息 : " + fileSaveName + " 下载完成!");
		} catch (Exception e) {
			errorLog(homePath, "~~~~~~~~~~");
			errorLog(homePath, "出错文件是:"+ urlFileName);
			errorLog(homePath, "出错链接是:" + urlStr);
			errorLog(homePath, "该文件出错行数是:" + errorNum);
			errorLog(homePath, "----------");
			e.printStackTrace();
		}

	}

	public static byte[] readInputStream(InputStream inputStream)throws IOException {
		try {
			byte[] buffer = new byte[1024];
			int len = 0;
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			while ((len = inputStream.read(buffer)) != -1) {
				bos.write(buffer, 0, len);
			}
			bos.close();
			return bos.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		
	}
}


分享到:
评论

相关推荐

    信息技术改变着我们的生活.doc

    国外的经验值得借鉴,如西方发达国家的人工智能住宅、智能化公共服务系统等,展示了信息技术改变生活的力量。他们的成功模式,如“信息技术生活化理论”,强调了将信息技术融入日常生活的重要性。通过社会实践和数据...

    ginhoor.github.io:技术改变生活,还是生活改变技术

    通过这些技术,作者不仅能够分享技术知识,还能够灵活地调整和扩展自己的在线空间,体现了技术与生活的紧密联系,同时也展示了技术如何改变我们的生活方式,让我们能够更便捷地获取和分享信息。

    2017阿里技术年度精选(下)

    2017年无疑是技术发展历史上值得铭记的一年。...通过阅读这本书,读者可以了解到阿里巴巴在技术领域的最新发展动态和未来趋势,感受到阿里技术人的创新精神和技术热情,以及他们对于技术改变生活、改变世界的坚定信念。

    科技改变生活PPT模板下载

    标题“科技改变生活PPT模板下载”提示我们这个资源是一个关于如何展示科技对日常生活影响的演示文稿模板,适用于电子商务和科技领域的讨论。这个PPT模板可能是为了帮助人们理解科技在现代社会中的作用,以及它是如何...

    无线通信技术改变我们的生活归纳.pdf

    无线通信技术改变我们的生活归纳 随着通信技术的不断更新与全面进步,人们越来越重视通信技术给人类带来的发展,通信技术越来越多的渗入到我们的生活并改变我们的生活。无线通信技术在日益增长的无线应用中扮演着...

    洁癖_csdn

    这一点,对于IT专业人士而言,意味着他们不仅是技术的创造者和应用者,也是技术改变生活实际体验的见证者。 主人公因装修而遭遇的停电问题,虽然文章没有深入探讨,但仍然能够让我们联想到现代智能家居系统对于电力...

    人工智能时代教育改革创新研究分析.pdf

    人工智能时代已经悄悄来临,并正在逐步渗透到各个领域,智慧化的教育也开始走入人们的生活,AI+教育时代正向我们走来,技术改变生活,教育领域要进行一场人工智能的大实验。AI 将被应用到课前、课上、课后、课外以及...

    无线通信技术改变我们的生活资料.pdf

    无线通信技术改变我们的生活资料.pdf

    《改变人们生活的智能技术》阅读答案.docx

    智能技术通过自动化、学习和自我调整的能力,极大地改变了人们的生活。例如,在交通领域,交通卡的使用背后就有一个庞大的智能资费系统,能在瞬间完成复杂的计费和结算过程,极大地节省了人力和时间。这不仅方便了...

    初中语文文摘文苑落太阳不再升起

    IT从业者对技术的热爱和执着追求,推动了科技的进步,他们敬重技术,因为技术改变生活,就像太阳给予世界光明和温暖。 总的来说,尽管《落太阳不再升起》主要探讨的是生活哲理,但它所蕴含的寓意——对关键元素的...

    5G时代,给我们的生活带来那些改变?.pdf

    5G技术不仅仅是移动通信技术的演进,更是信息技术的一次革命,它的高速率、低延迟、高可靠性和大容量特性,正在深刻地影响和改变我们的生活。 在智能手机方面,5G的到来带动了折叠型手机的诞生,这种新型智能手机...

    《代价》读后感作文.doc

    有人认为生命无价,不能用物质财富来衡量,但日本老板的行动却表明,他更看重通过技术改变生活、提升社会价值的能力。这也提醒我们,生命固然宝贵,但若能通过付出获得改变世界的力量,这样的代价或许是有意义的。 ...

    2021-2022年收藏的精品资料中考英语真题分类汇编:题型3阅读理解专项训练12科普知识与现代科技.doc

    比如题目1就要求学生分析文章中互联网的例子,目的是为了让学生理解技术改变生活的深远影响。文章通过使用互联网的例子,旨在说明技术如何彻底改变人们的交流、学习和日常生活方式。通过这样的问题设置,学生可以...

    给自己的晚安正能量短语精选.doc

    9. **价值与意义**:每一个在IT行业奋斗的人都是独一无二的,我们的价值在于如何利用技术改变生活,解决实际问题。无论遇到什么挑战,都要记住自己的目标,不断追求卓越。 10. **等待与坚持**:在遇到技术难题或...

    未来已来,人工智能将如何改变我们的生活.pdf

    1. 文档的主题是关于人工智能(AI)将如何影响和改变我们的生活。这个主题属于前沿科技领域,与当前技术发展及未来趋势紧密相关,受到学术界和产业界的广泛关注。 2. 文档中提及的“ACADEMICIAN LECTURE CIVIL-...

    移动改变生活作文.doc

    正如一篇名为“移动改变生活作文”的学生作品中所描述,移动通信技术的进步不仅让个人生活变得更加便捷,也使得社会整体运行更加高效。 移动通信技术,特别是智能手机的多功能性,极大地扩展了手机的传统功能。在...

    生活中的信息技术(PPT).ppt

    计算机与网络技术不仅改变了信息的获取和分享方式,如网页制作比赛的成果,还涉及到日常的银行业务,如ATM自动柜员机。微电子和传感技术则应用于智能家居、健康监测等领域,让生活变得更加智能化。 条形码和条形码...

    IT改变生活 生活创造IT.docx

    信息技术(IT)的崛起为21世纪带来了深远的社会变革,它不仅改变了我们的工作方式、沟通方式,还影响着我们的思维方式。IT的三个层面——硬件、软件和信息应用,共同构成了现代社会的数字基础。IT的发展始于机械化...

    冀教版六年级下册品德与社会教案科学技术改变我们的生活.pdf

    冀教版六年级下册品德与社会教案科学技术改变我们的生活.pdf

    XP教育改变生活登陆界面

    通过类似“XP教育改变生活登陆界面”这样的定制化工具,教育工作者可以更加灵活地利用技术,将传统的教育模式转变为更加开放、互动和个性化的学习体验。这不仅有助于提高学生的学习效率,而且能够激发他们的创造力和...

Global site tag (gtag.js) - Google Analytics