`
liomao
  • 浏览: 78454 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA ZIP打包和POI导出

阅读更多

	/**
	 * 导出Excel功能
	 * @param sql 获取数据要执行的SQL语句
	 * @param params SQL语句的参数
	 * @param column Excel表头,如果有扩展属性的话,可定义为:户号,户名,营业区域$ALL_BS_INFO
	 * @param excelRowsLimit 没个Excel单元格的条数
	 * @param httpServletRequest 
	 * @return 改Excel的下载地址
	 * @throws Exception
	 */
	public String expExcel(String sql, List params, String[] column,
			int excelRowsLimit, HttpServletRequest httpServletRequest)
			throws Exception {
		DBTool dbTool = null;
		String downloadUrl = "";
		Record[] rds = null;
		Record record = null;
		ZipOutputStream out =  null;
		try {
			dbTool = new DBTool();
			rds = dbTool.executeQuery(sql, params);
//			System.out.println("L:  "+rds.length);
			int genExcelRowsLimit = excelRowsLimit <= 0 ? ServiceLocator.getInstance().getWebAppConfig().getGenExcelRowsLimit(): excelRowsLimit;
			
			String path = ServiceLocator.getInstance().getWebAppConfig().getExcelTempDirectory();
			String zipPath = httpServletRequest.getSession().getId()+ System.currentTimeMillis() + ".zip";
			downloadUrl = "http://" + httpServletRequest.getServerName() + ":"+ httpServletRequest.getServerPort()
					+ httpServletRequest.getContextPath()+ "/GetTempFileServlet?fileName=" + zipPath;
			if (path == null) {
				path = httpServletRequest.getSession().getServletContext().getRealPath("download");
				downloadUrl = "http://" + httpServletRequest.getServerName()
						+ ":" + httpServletRequest.getServerPort()+ httpServletRequest.getContextPath() + "/download"
						+ "/" + zipPath;
			}
//			System.out.println(path+System.getProperty("file.separator")+zipPath);
			File file = new File(path+System.getProperty("file.separator")+zipPath);
			if(!file.exists()){
				file.createNewFile();
			}
			out = new ZipOutputStream(new FileOutputStream(file));
			DropBeanMap dbm = DropBeanMap.getInstance();

			int fileCount = rds.length % genExcelRowsLimit == 0 ? rds.length/genExcelRowsLimit : rds.length / genExcelRowsLimit + 1;
//			System.out.println("fileCount "+fileCount);
			for (int i = 0; i < fileCount; i++) {
				int temp = i * genExcelRowsLimit;

				HSSFWorkbook wb = new HSSFWorkbook();
				HSSFSheet hs = wb.createSheet();

				HSSFCellStyle style = wb.createCellStyle();
				style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
				style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
				style.setBorderRight(HSSFCellStyle.BORDER_THIN);
				style.setBorderTop(HSSFCellStyle.BORDER_THIN);
				style.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
				style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
				HSSFFont font = wb.createFont();
				font.setFontHeightInPoints((short) 11);
				style.setFont(font);
				HSSFCellStyle style1 = wb.createCellStyle();
				style1.setBorderBottom(HSSFCellStyle.BORDER_THIN);
				style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);
				style1.setBorderRight(HSSFCellStyle.BORDER_THIN);
				style1.setBorderTop(HSSFCellStyle.BORDER_THIN);
				style1.setFillForegroundColor(HSSFColor.ORANGE.index);
				style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
				HSSFFont font1 = wb.createFont();
				font1.setFontHeightInPoints((short) 15);
				font1.setBoldweight((short) 700);
				style1.setFont(font);
				HSSFCellStyle style2 = wb.createCellStyle();
				style2.setWrapText(true); // 设置自动换行

				HSSFRow hr = hs.createRow(0);
				for (int j = 0; j < column.length; j++) {
					// 设置表头
					String value = "";
					if (column[j].indexOf("$") < 0) {
						value = column[j];
					} else {
						value = column[j].substring(0, column[j].indexOf("$"));
					}
					int len = value.length();
					hs.setColumnWidth((short) j, (short) (len * 1600));
					HSSFCell hc = hr.createCell((short) j);
					hc.setEncoding(HSSFCell.ENCODING_UTF_16);
					hc.setCellStyle(style1);
					hc.setCellValue(value);
				}
				
				int eachCount =  genExcelRowsLimit;
				if(i==(fileCount-1) && rds.length % genExcelRowsLimit != 0 ){
					eachCount = rds.length % genExcelRowsLimit-1;
				}
//				System.out.println("i: "+i+" eachCount: "+eachCount);
				for (int j = 0; j < eachCount; j++) {
					hr = hs.createRow(j + 1);
//					System.out.println("temp + j: "+(temp + j));
					record = rds[temp + j];
					for (int r = 0; r < column.length; r++) {
						String dropName = "";
						String value = record.getString(r + 1) == null ? "": record.getString(r + 1).toString();
						value = value.replaceAll(";alt", "'");
						if (column[r].indexOf("$") >= 0) {
							dropName = column[r].substring(column[r].indexOf("$") + 1, column[r].length());
							value = dbm.getDropLabel(dropName, value);
						}
						hr.setHeight((short) 500);
						HSSFCell hc = hr.createCell((short) r);
						hc.setCellStyle(style);
						hc.setEncoding(HSSFCell.ENCODING_UTF_16);
						hc.setCellValue(value);
						hc.setCellStyle(style2);
					}
				}
				
				out.putNextEntry(new ZipEntry(i+".xls"));
				
				wb.write(out);
			}
			out.close();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new highsoft.framework.exceptions.BaseRunException(
					"导出excel出错!", e);
		} finally {
			if (dbTool != null) {
				dbTool.closeConnection();
				dbTool = null;
			}
			if(null != out){
			      try{
			    	  out.flush();
			    	  out.close();
			    	  out = null;
			      }
			      catch(IOException e){}; 
			}
		}
		return downloadUrl;
	}

	/**
	  * 遍历目录并添加文件.
	  * @param jos - JAR 输出流
	  * @param file - 目录文件名
	  * @param pathName - ZIP中的目录名
	  * @throws IOException
	  * @throws FileNotFoundException
	  */
	 private static void recurseFiles(ZipOutputStream jos, File file,
			String pathName) throws IOException, FileNotFoundException {
		byte buf[] = new byte[1024];
		if (file.isDirectory()) {
			pathName = pathName + file.getName() + "/";
			jos.putNextEntry(new ZipEntry(pathName));
			String fileNames[] = file.list();
			if (fileNames != null) {
				for (int i = 0; i < fileNames.length; i++)
					recurseFiles(jos, new File(file, fileNames[i]), pathName);
			}
		} else {
			ZipEntry jarEntry = new ZipEntry(pathName + file.getName());
			// System.out.println(pathName + " " + file.getName());
			FileInputStream fin = new FileInputStream(file);
			BufferedInputStream in = new BufferedInputStream(fin);
			jos.putNextEntry(jarEntry);
			int len;
			while ((len = in.read(buf)) >= 0)
				jos.write(buf, 0, len);
			in.close();
			jos.closeEntry();
		}
	}
	 
	 /**
		 * 创建 ZIP/JAR 文件.
		 * 
		 * @param directory -
		 *            要添加的目录
		 * @param zipFile -
		 *            保存的 ZIP 文件名
		 * @param zipFolderName -
		 *            ZIP 中的路径名
		 * @param level -
		 *            压缩级别(0~9)
		 * @throws IOException
		 * @throws FileNotFoundException
		 */
	 public static void makeDirectoryToZip(File directory, File zipFile,
			String zipFolderName, int level) throws IOException,
			FileNotFoundException {
		level = (level < 0 || level > 9)? 7 : level;
		if (zipFolderName == null) {
			zipFolderName = "";
		}
		ZipOutputStream jos = new ZipOutputStream(new FileOutputStream(zipFile));
		jos.setLevel(level);
		String fileNames[] = directory.list();
		if (fileNames != null) {
			for (int i = 0; i < fileNames.length; i++)
				recurseFiles(jos, new File(directory, fileNames[i]),zipFolderName);
		}
		jos.close();
	}
	 
 
分享到:
评论

相关推荐

    使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

    使用POI导出Excel文件** 导出Excel文件主要涉及以下几个步骤: - **创建Workbook对象**:这是Excel文件的容器,可以使用`XSSFWorkbook`(针对.xlsx)或`HSSFWorkbook`(针对.xls)创建。 - **创建Sheet对象**:...

    java导出30万数据量的excel(采用生成多个excel,最后打包zip)

    5. **文件打包成ZIP**: Java内置的java.util.zip包提供了ZipOutputStream类,可以用来创建ZIP文件。将生成的多个Excel文件添加到ZipOutputStream,最后生成一个ZIP文件。这样用户只需下载一个ZIP文件,解压后即可...

    使用POI实现表格导出jar包.zip

    将这两个目录一起打包成zip文件,即得到"使用POI实现表格导出jar包.zip"。 使用这个jar包时,只需通过Java的`java -jar`命令执行,即可在指定位置生成Excel文件。需要注意的是,由于jar文件包含所有依赖,所以它的...

    生成excel并打包成zip文件

    综上所述,"生成excel并打包成zip文件"这个任务涉及到使用Java编程语言,特别是Apache POI库来生成Excel文件,再结合Java标准库的压缩功能将Excel和文本文件打包成ZIP。整个过程涉及到了文件的创建、写入、压缩和...

    Java_批量导出大数据量Excel方法.zip

    本资料"Java_批量导出大数据量Excel方法.zip"包含两个关键文件:excelproj和ExpXLS,它们可能是项目的源代码或示例,用于演示如何实现这个功能。 1. **Apache POI库**: Apache POI是Java中广泛使用的库,用于读写...

    java将数据导入多个excel并压缩,亲测可用

    - **Apache POI**:Apache POI 是一个流行的开源库,它允许Java程序员读取、写入和修改Microsoft Office格式的文件,包括Excel。使用HSSF(Horrible Spreadsheet Format)处理.xls格式,XSSF处理.xlsx格式。 - **...

    excel读取,自动导出打包,poi学习文档

    本篇内容将深入探讨如何使用Apache POI进行Excel的读取操作以及如何自动导出和打包数据。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来处理Microsoft Office格式的文件。主要关注于HSSF...

    Excel导入导出,zip包

    Zip则是一种文件压缩格式,它能够将多个文件打包并压缩,便于存储和传输。在这个场景中,我们讨论的是如何在Excel与zip之间进行数据交互。 首先,`Excel导入导出`涉及到的数据操作是Excel文件中的数据与其他系统或...

    [源代码程序]java 实现Excel压缩成Zip导出.zip

    在IT行业中,尤其是在Java开发领域,经常会遇到需要处理文件压缩和导出...以上就是关于Java实现Excel压缩成Zip导出的相关知识点,这些技术广泛应用于文件管理和数据导出场景,对于提升软件的易用性和效率具有重要意义。

    导出Word:POI or Freemarker

    1. 使用POI导出Word: 在简单的文档生成场景中,如仅需填充固定模板的数据,你可以直接使用POI操作.docx文件。首先,创建一个.docx模板文件,然后通过POI读取该文件,替换其中的占位符为实际数据。这种方式适用于...

    java动态导出excel压缩成zip下载的方法

    java动态导出excel压缩成zip下载的方法主要通过使用java中的IO流和ZipOutputStream来实现excel文件的压缩和下载。首先,创建一个文件夹用于存储excel文件,然后使用jxl库创建excel文件,并将其写入到文件夹中。接着...

    poi导出大数据,先生成多个excel在生成一个jar包

    标题中的“poi导出大数据,先生成多个excel在生成一个jar包”涉及到的是使用Apache POI库处理大数据量Excel导出,并将结果整合到一个Java Archive (JAR) 文件中的技术。Apache POI是一个流行的开源库,允许程序员...

    Java通过word编辑为xml和ftl格式的模板创建导出word文档 .zip

    这个压缩包“Java通过word编辑为xml和ftl格式的模板创建导出word文档 .zip”提供了一个示例项目,用于演示如何使用Java编程语言来操作Word文档,并将其内容转化为XML和FTL(FreeMarker)模板格式。以下将详细介绍这...

    Java、Excel导出

    本篇文章将深入探讨如何使用Java和POI库来实现各种复杂的Excel导出功能。 1. **实现Excel简单导出** 在Java中,使用POI库可以轻松创建基本的Excel文件。首先,我们需要创建一个`HSSFWorkbook`对象作为工作簿,然后...

    java_百万级数据导出EXCLE并打包

    - **ZIP压缩**:使用Java的`java.util.zip`包,可以将生成的多个Excel文件打包成ZIP,方便用户下载和管理。 7. **发送邮件**: - **JavaMail API**:用于发送邮件,可以将打包后的文件作为附件发送给指定收件人。...

    数据生成Excel文件并导出.zip

    在Java编程中,导出Excel文件是一项常见的任务,特别是在数据处理和报表生成的场景中。以下将详细讲解如何使用Java来生成Excel文件,并提供相关的知识点。 1. **Apache POI库**:Apache POI是Java社区开发的一个...

    ssm.zip=ssm+maven导出表格数据

    【标题】"ssm.zip=ssm+maven导出表格数据" 涉及到的主要技术是Spring、Struts和MyBatis(SSM)框架的整合,以及使用Maven进行项目管理和构建,同时提到了数据导出的功能,通常这意味着将数据库中的数据转化为Excel或...

    poi-ooxml-3.15.zip

    "jar"标签表明这个压缩包内包含的是Java Archive(JAR)文件,它是Java平台中用于打包多个类文件和其他资源的标准格式。Apache POI的JAR文件允许Java开发者在程序中直接操作和创建OOXML文档,而无需依赖Microsoft ...

    java以文本方式导出xlsx格式

    4. **压缩文件**:将上述生成的XML文件和其他必要的XML文件(如`rels`、`sharedStrings.xml`等)打包成ZIP文件,并命名为`.xlsx`。 5. **文件写入**:将生成的ZIP文件写入磁盘,用户即可下载或使用。 使用这种方法...

    POI批量导入导出Demo,附带批量压缩

    在"TestPOI"这个压缩子文件中,可能包含了一个或者多个示例文件,用于演示如何使用这个工具类进行批量导入导出和压缩操作。这些示例文件可能包括输入的Excel文件、预期的输出Excel文件以及生成的压缩文件。开发者...

Global site tag (gtag.js) - Google Analytics