`

针对操作文件夹、压缩文件的应用实例

 
阅读更多
package com.spider.reader.business.action;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.spider.reader.business.service.ArticleService;
import com.spider.reader.business.service.PeriodService;
import com.spider.reader.common.action.BaseAction;
import com.spider.reader.common.bean.Article;
import com.spider.reader.common.bean.Period;
import com.spider.reader.common.tool.GetFileSize;
import com.spider.reader.common.tool.ZipUtil;
import com.spider.reader.common.util.Contants;
import com.spider.reader.common.util.HttpDownload;
import com.spider.reader.common.util.StringUtils;

/**
 * @ClassName: DataExportAction
 * @Description: 电信、移动数据导出
 * @author zhough
 * @date 2012-12-17 下午05:38:32
 */
public class DataExportAction extends BaseAction {
	private static final long serialVersionUID = 1L;

	protected final static Log log = LogFactory.getLog(DataExportAction.class);
	
	private String qproductid;
	
	private PeriodService periodService;
	
	private ArticleService articleService;

	/***************************** 电信数据导出 ************************************/
	public String teleDataExport() {
		log.error("teleDataExport start……");
		String jouralId = StringUtils.nvl(this.getRequest().getParameter("jouralId"));
		String issueId = StringUtils.nvl(this.getRequest().getParameter("issueId"));
		qproductid = StringUtils.nvl(jouralId);
		Period periodVo = periodService.queryPeriodById(StringUtils.nvl(issueId), Period.class);//通过id查询刊期
		if(null == periodVo){
			getRequest().setAttribute("message", "没获取到刊期相关数据!");
			return "error";
		}
		FileOutputStream out_0 = null;
		try {
			String periodName = periodVo.getProductname();
			periodName = periodName.replaceAll("<","").replaceAll(">","").replaceAll("\\|","").replaceAll("\\?","").replaceAll("\\*","").replaceAll("\\/","").replaceAll(":","");
			/** 名称:电信--中外文化交流 **/
			String mkdirPath = Contants.getProjectRealPath() + "/exportfile/d" + periodVo.getId() + "/电信--" + periodName;
			String fileTxt =  mkdirPath + "/正文.txt";
			StringBuilder contentTxt = new StringBuilder();
			File zipFile = new File(mkdirPath + ".zip");
			if(zipFile.exists()) {
				zipFile.delete();
			}
			File filepath = new File(mkdirPath);
			if (!filepath.isDirectory()) {
				filepath.mkdirs();
			}
			/** 查询刊期下的上架文章status = 1 **/
			List<Article> articleList = articleService.queryArticleList(StringUtils.nvl(issueId),"1");
			log.error("teleDataExport articleList ==" + articleList.size());
			if(null == articleList || articleList.size() == 0){
				getRequest().setAttribute("message", "没获取到刊期文章相关数据!");
				return "error";
			}
			/** 存储所有图片 * */
			List<String[]> picList = new ArrayList<String[]>();
			String strTemp = "";
			if (null != articleList && articleList.size() > 0) {
				for (int i = 0; i < articleList.size(); i++) {
					Article articleVo = (Article) articleList.get(i);
					String contentId = StringUtils.nvl(articleVo.getId()); // 当前文章ID
					String contentName = StringUtils.nvl(articleVo.getName()); // 当前文章标题
					String[] contentPic = StringUtils.getPicture(articleVo.getLargepicture(), "480"); // 480抬头大图
					picList.add(contentPic); // 抬头大图存入List中
					String columnName = StringUtils.nvl(articleVo.getColumnname()); // 栏目名称
					String articleContent = StringUtils.nvl(articleVo.getContent()); // 当前文章正文
					/****************************** 拼揍正文 ******************************/
					if(!strTemp.contains(columnName)){
						strTemp += columnName+"|";
						contentTxt.append("##"+columnName+"\n\n");
					}
					contentTxt.append("###"+contentName+"\n\n");
					contentTxt.append("  "+StringUtils.getVivaContent(articleContent));
					contentTxt.append("\n\n\n\n");
					/****************************** 组装图片copy到对应目录 ******************************/
					String[] picAs = (String[]) picList.get(i);
					String path=Contants.getUploadImgPath();	//取得服务器上的图片
					if(path.equals("/")){
						path=Contants.getProjectRealPath();
					}
					if (StringUtils.isNotEmpty(picAs[0]) && StringUtils.isNotEmpty(picAs[1]) && !picAs[1].contains(Contants.DEFAULTPIC)) {
						File fileTmp = new File(path + "/pic/bookpic/" + picAs[1]);
						log.error("teleDataExport fileTmp =="+fileTmp);
						if (fileTmp.exists()) {
							ZipUtil.copyStreamTwo(path + "/pic/bookpic/" + picAs[1], mkdirPath + "/" + columnName + "-" + contentName + ".jpg");
						}
					}
				}
				/********************* 生成txt文档 **********************/
				out_0 = new FileOutputStream(fileTxt);
        		out_0.write(contentTxt.toString().getBytes());
        		/***************** 生成zip文档 ******************/
        		mkdirPath = Contants.getProjectRealPath() + "/exportfile/d" + periodVo.getId();
				ZipUtil.zip(mkdirPath, mkdirPath + ".zip");
				GetFileSize.delFolder(mkdirPath);
				String zipPath = mkdirPath + ".zip";
				new HttpDownload().httpDownLoadUtil(this.getRequest(), this.getResponse(), zipPath);
			}
		} catch (Exception e) {
			e.printStackTrace();
			getRequest().setAttribute("message", "电信数据导出失败!");
			return "error";
		}finally{
			try {
				if(null != out_0){
					out_0.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
		getRequest().setAttribute("message", "电信数据导出成功");
		return SUCCESS;
	}
	
	/***************************** 移动数据导出 ************************************/
	public String moveDataExport(){
		log.error("moveDataExport start……");
		String jouralId = StringUtils.nvl(this.getRequest().getParameter("jouralId"));
		String issueId = StringUtils.nvl(this.getRequest().getParameter("issueId"));
		qproductid = StringUtils.nvl(jouralId);
		Period periodVo = periodService.queryPeriodById(StringUtils.nvl(issueId), Period.class);//通过id查询刊期
		if(null == periodVo){
			getRequest().setAttribute("message", "没获取到刊期相关数据!");
			return "error";
		}
		/** 查询刊期下的上架文章status = 1 **/
		List<Article> articleList = articleService.queryArticleList(StringUtils.nvl(issueId),"1");
		log.error("moveDataExport articleList=="+articleList.size());
		if(null == articleList || articleList.size() == 0){
			getRequest().setAttribute("message", "没获取到刊期文章相关数据!");
			return "error";
		}
		FileOutputStream out_0 = null;
		try {
			String periodName = periodVo.getProductname();
			periodName = periodName.replaceAll("<","").replaceAll(">","").replaceAll("\\|","").replaceAll("\\?","").replaceAll("\\*","").replaceAll("\\/","").replaceAll(":","");
			/** 名称:移动--中外文化交流2012年第12期 **/
			String mkdirPath = Contants.getProjectRealPath() + "/exportfile/y" + periodVo.getId() + "/移动--" + periodName + periodVo.getPeriodname();
			log.error("moveDataExport mkdirPath=="+mkdirPath);
			/** 存储所有图片 * */
			List<String[]> picList = new ArrayList<String[]>();
			String fileTxt = "";
			File zipFile = new File(mkdirPath + ".zip");
			log.error("moveDataExport zipFile=="+zipFile);
			if(zipFile.exists()) {
				zipFile.delete();
			}
			File filepath = new File(mkdirPath);
			if (!filepath.isDirectory()){
				filepath.mkdirs();
			}
			if(null != articleList && articleList.size()>0){
				for(int i = 0; i < articleList.size(); i++){
					Article articleVo = (Article) articleList.get(i);
					String contentId = StringUtils.nvl(articleVo.getId()); // 当前文章ID
					String contentName = StringUtils.nvl(articleVo.getName()); // 当前文章标题
					String[] contentPic = StringUtils.getPicture(articleVo.getLargepicture(), "480"); // 480抬头大图
					picList.add(contentPic); // 抬头大图存入List中
					String articleContent = StringUtils.nvl(articleVo.getContent()); // 当前文章正文
					/****************************** 拼揍正文 ******************************/
					StringBuilder contentTxt = new StringBuilder();
					contentTxt.append(contentName+"\n\n");
					contentTxt.append("  "+StringUtils.getVivaContent(articleContent));
					contentTxt.append("\n");
//					contentTxt.append("    本文出自:《" + periodName + "》" + periodVo.getPeriodname());
					/****************************** 组装图片copy到对应目录 ******************************/
					String[] picAs = (String[]) picList.get(i);
					String path=Contants.getUploadImgPath();	//取得服务器上的图片
					if(path.equals("/")){
						path=Contants.getProjectRealPath();
					}
					if (StringUtils.isNotEmpty(picAs[0]) && StringUtils.isNotEmpty(picAs[1]) && !picAs[1].contains(Contants.DEFAULTPIC)) {
						File fileTmp = new File(path + "/pic/bookpic/" + picAs[1]);
						log.error("moveDataExport fileTmp=="+fileTmp);
						if (fileTmp.exists()) {
							ZipUtil.copyStreamTwo(path + "/pic/bookpic/" + picAs[1], mkdirPath + "/"  + String.valueOf(i+1) + contentName + ".jpg");
						}
					}
					fileTxt = mkdirPath + "/" + String.valueOf(i+1) + contentName + ".txt";
					log.error("moveDataExport fileTxt=="+fileTxt);
					/********************* 生成txt文档 **********************/
					out_0 = new FileOutputStream(fileTxt);
	        		out_0.write(contentTxt.toString().getBytes());
				}
				/***************** 生成zip文档 ******************/
				mkdirPath = Contants.getProjectRealPath() + "/exportfile/y" + periodVo.getId();
				ZipUtil.zip(mkdirPath, mkdirPath + ".zip");
				GetFileSize.delFolder(mkdirPath);
				String zipPath = mkdirPath + ".zip";
				new HttpDownload().httpDownLoadUtil(this.getRequest(), this.getResponse(), zipPath);
			}
		} catch (Exception e) {
			e.printStackTrace();
			getRequest().setAttribute("message", "移动数据导出失败!");
			return "error";
		}finally{
			try {
				if(null != out_0){
					out_0.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
		getRequest().setAttribute("message", "移动数据导出成功");
		return SUCCESS;
	}
	
	public String getQproductid() {
		return qproductid;
	}

	public void setQproductid(String qproductid) {
		this.qproductid = qproductid;
	}
	
	public void setPeriodService(PeriodService periodService) {
		this.periodService = periodService;
	}

	public void setArticleService(ArticleService articleService) {
		this.articleService = articleService;
	}
}

 

分享到:
评论

相关推荐

    java压缩文件以及文件夹

    本文将深入探讨如何使用Java来处理压缩文件,特别是针对标题提及的“java压缩文件以及文件夹”。我们将主要关注`ZipCompressor.java`这个类,它是实现文件和文件夹压缩的核心工具。 首先,让我们了解`java.util.zip...

    nodejs实现遍历文件夹并统计文件大小

    这段代码不仅是对Node.js文件系统模块fs功能的展示,也是对异步操作、递归和文件排序算法等计算机基础知识的应用。通过这个实例,我们可以了解到如何利用Node.js对文件系统进行高效地遍历和处理,并且理解到了文件...

    vbs实现压缩文件夹的脚本

    综上所述,使用VBScript进行文件夹压缩,实际上是通过修改文件夹的系统属性来实现压缩效果,而不是创建一个压缩文件包。这种技术在某些需要批量压缩文件的管理任务中非常有用,但需要注意权限和兼容性问题,并且要...

    第3课云网盘文件巧管理、文件压缩(教案).docx

    - 针对WinRAR的使用,可以通过实例演示和学生自主尝试来逐步掌握。 9. **教学评价**: - 评价不仅限于技能掌握,还包括学生的参与度、问题解决能力和团队合作精神。 通过以上讲解,学生不仅可以了解云网盘的基本...

    四年级信息技术下册-使用压缩软件课件-冀教版(共14张PPT).pptx

    在讲解如何压缩文件夹的部分中,教师通过实例操作来演示整个过程。学生将学习如何通过右键菜单选择“添加到压缩文件”命令,然后在弹出的窗口中设置压缩文件的名称、选择压缩格式,并根据需要选择是否进行分卷压缩,...

    文件夹注释备注批处理软件.7z

    从压缩包子文件的文件名称“windows-folder-remark-master”来看,这可能是项目的源代码仓库,可能包含了程序的主要代码文件和相关资源。"master"通常代表Git仓库的主分支,暗示这是一个开源项目,用户不仅可以下载...

    51-嵌入式交叉编译环境搭建(2)--解压缩文件fedora14.pdf

    用户需要找到下载的压缩文件,例如"fedora14(set well)",然后通过鼠标右键菜单选择“解压文件”。在弹出的选项中,指定解压的目标位置,这里推荐选择D盘根目录,这样便于管理和访问解压后的文件。解压完成后,D盘根...

    js压缩混淆工具

    它允许用户选择要处理的js文件或者代码块,无论是单独的文件还是整个文件夹,都可以进行压缩和混淆处理。 标签“js javascript 压缩 混淆”进一步明确了工具的功能,其中“js”和“javascript”是同义词,指代...

    php ZipArchive压缩函数详解实例

    以下将详细介绍使用ZipArchive类实现两个实例:一个是生成ZIP压缩文件,另一个是压缩文件夹下所有文件。 首先,我们需要了解如何使用ZipArchive类来生成一个ZIP压缩文件。创建一个ZIP文件的基本步骤包括:创建一个...

    C# 压缩源码

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用和.NET框架相关项目时。本主题聚焦于"C# 压缩",这是一个关键的文件处理技术,允许程序将一组文件或目录打包成更小的体积,以便于存储、传输或...

    C#实现文件压缩与解压的方法示例【ZIP格式】

    本文主要介绍了C#实现文件压缩与解压的方法,结合具体实例形式分析了C#针对文件进行zip格式压缩与解压缩的相关操作技巧。 文件压缩 文件压缩是将文件或文件夹压缩成一个小的文件,以便于存储或传输。在C#中,可以...

    新建 360压缩 ZIP 文件.zip_STC_canalq3i_ranxen

    【标题】"新建 360压缩 ZIP 文件.zip_STC_canalq3i_ranxen" 提供了几个关键信息点,首先这是一个使用360压缩软件创建的ZIP格式的压缩文件。ZIP是一种常见的文件归档和压缩格式,允许我们将多个文件或文件夹打包成一...

    南充人NET3.5 LINQ实例

    3. “web”同样可能是一个文件夹或文件,可能与Web应用程序开发相关,展示了如何在ASP.NET 3.5环境中使用LINQ来处理Web应用中的数据。 综上所述,这个压缩包内容很可能是为了帮助开发者理解如何在.NET 3.5框架下,...

    图片大小压缩.zip 批量图片压缩

    - 选择“批量处理”选项,导入需要压缩的图片文件或整个文件夹。 - 设置压缩参数,如目标尺寸、质量级别、输出格式等。 - 确认设置无误后,点击“开始”执行批量压缩任务。 - 完成后,压缩后的图片会保存在指定...

    实例(1).rar

    1. **压缩格式**: .rar 是一种流行的压缩文件格式,由WinRAR软件创建。它允许用户将多个文件和文件夹打包成一个更小的文件,便于存储和传输。 2. **数据压缩**: 压缩技术的核心是减少文件大小,通过算法去除冗余...

    小程序源码 辅助类库 afinal开源框架实例源码.rar

    这个压缩包文件包含了关于小程序开发和Android应用开发的相关内容,重点是使用了afinal开源框架的实例源码。Afinal是一个轻量级的Android开发框架,旨在简化Android中的数据库操作和网络请求,提供了一种简洁的API...

    删除文件时,系统提示“无法删除,访问被拒绝,请确定磁盘未满或未被写保护,程序未被使用文.pdf

    6. 使用WinRAR等压缩工具,将文件压缩后勾选“压缩后删除源文件”,完成后再删除压缩包。 7. 结束Explorer进程,启动新的Explorer.exe实例,然后尝试删除。这可以通过任务管理器实现。 对于“非空文件夹”或“坏...

    西门子PLC200_300_400应用程序设计实例精讲好压分卷说明.

    综上所述,通过对提供的文件信息进行分析,我们了解到了关于西门子PLC200、300、400系列的应用程序设计实例精讲的相关内容以及如何使用2345好压进行分卷压缩和解压的操作方法。这对于想要深入了解PLC编程以及文件...

    Asp.net文件在线管理系统源码_aspx开发教程.7z

    这个源码实例为开发者提供了一个学习和实践ASP.NET Web应用程序开发,特别是针对文件操作和管理功能的理想平台。在ASP.NET中,我们通常使用C#或VB.NET作为后端编程语言,而ASPX则是用于创建动态网页的服务器端脚本。...

Global site tag (gtag.js) - Google Analytics