`

Java 压缩Excel文件生成.zip文件

 
阅读更多

首先创建文件目录,然后生成Excel文件到创建的目录下,

通过IO流压缩Excel文件成zip文件 到指定目录,最后删除指定目录下所有的Excel文件。

 

具体代码如下:

package pack.java.io.demo;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * zip压缩文件实例
 * add by 周海涛
 * @author Administrator
 *
 */
public class ZipDemo {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public static void main(String[] args) throws RowsExceededException, WriteException, IOException {
		String path = "C:/document/excel";
		//创建文件夹;
		createFile(path);
		//创建Excel文件;
		createExcelFile(path);
		//生成.zip文件;
		craeteZipPath(path);
		//删除目录下所有的文件;
		File file = new File(path);
		//删除文件;
		deleteExcelPath(file);
		//重新创建文件;
		file.mkdirs();
	}
	
	/**
	 * 创建文件夹;
	 * @param path
	 * @return
	 */
	public static String createFile(String path){
		File file = new File(path);
		//判断文件是否存在;
		if(!file.exists()){
			//创建文件;
			boolean bol = file.mkdirs();
			if(bol){
				System.out.println(path+" 路径创建成功!");
			}else{
				System.out.println(path+" 路径创建失败!");
			}
		}else{
			System.out.println(path+" 文件已经存在!");
		}
		return path;
	}
	
	/**
	 * 在指定目录下创建Excel文件;
	 * @param path
	 * @throws IOException 
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public static void createExcelFile(String path) throws IOException, RowsExceededException, WriteException{
		for(int i =0;i<3;i++){
			//创建Excel;
			WritableWorkbook workbook = Workbook.createWorkbook(new File(path+"/" + new SimpleDateFormat("yyyyMMddHHmmsss").format(new Date() )+"_"+(i+1)+".xls"));
			//创建第一个sheet文件;
			WritableSheet sheet = workbook.createSheet("导出Excel文件", 0);
			//设置默认宽度;
			sheet.getSettings().setDefaultColumnWidth(30);
			
			//设置字体;
			WritableFont font1 = new WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.RED);

			WritableCellFormat cellFormat1 = new WritableCellFormat(font1);
			//设置背景颜色;
			cellFormat1.setBackground(Colour.BLUE_GREY);
			//设置边框;
			cellFormat1.setBorder(Border.ALL, BorderLineStyle.DASH_DOT);
			//设置自动换行;
			cellFormat1.setWrap(true);
			//设置文字居中对齐方式;
			cellFormat1.setAlignment(Alignment.CENTRE);
			//设置垂直居中;
			cellFormat1.setVerticalAlignment(VerticalAlignment.CENTRE);
			//创建单元格
			Label label1 = new Label(0, 0, "第一行第一个单元格(测试是否自动换行!)",cellFormat1);
			Label label2 = new Label(1, 0, "第一行第二个单元格",cellFormat1);
			Label label3 = new Label(2, 0, "第一行第三个单元格",cellFormat1);
			Label label4 = new Label(3, 0, "第一行第四个单元格",cellFormat1);
			//添加到行中;
			sheet.addCell(label1);
			sheet.addCell(label2);
			sheet.addCell(label3);
			sheet.addCell(label4);
			
			//给第二行设置背景、字体颜色、对齐方式等等;
			WritableFont font2 = new WritableFont(WritableFont.ARIAL,14,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLUE2);
			WritableCellFormat cellFormat2 = new WritableCellFormat(font2);
			cellFormat2.setAlignment(Alignment.CENTRE);
			cellFormat2.setBackground(Colour.PINK);
			cellFormat2.setBorder(Border.ALL, BorderLineStyle.THIN);
			cellFormat2.setWrap(true);

			//创建单元格;
			Label label11= new Label(0,  1, "第二行第一个单元格(测试是否自动换行!)",cellFormat2);
			Label label22 = new Label(1, 1, "第二行第二个单元格",cellFormat2);
			Label label33 = new Label(2, 1, "第二行第三个单元格",cellFormat2);
			Label label44 = new Label(3, 1, "第二行第四个单元格",cellFormat2);

			sheet.addCell(label11);
			sheet.addCell(label22);
			sheet.addCell(label33);
			sheet.addCell(label44);

			//写入Excel表格中;
			workbook.write();
			//关闭流;
			workbook.close();
		}
	}
	
	/**
	 * 生成.zip文件;
	 * @param path
	 * @throws IOException 
	 */
	public static void craeteZipPath(String path) throws IOException{
		ZipOutputStream zipOutputStream = null;
		File file = new File(path+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".zip");
		zipOutputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
		File[] files = new File(path).listFiles();
		FileInputStream fileInputStream = null;
		byte[] buf = new byte[1024];
		int len = 0;
		if(files!=null && files.length > 0){
			for(File excelFile:files){
				String fileName = excelFile.getName();
				fileInputStream = new FileInputStream(excelFile);
				//放入压缩zip包中;
				zipOutputStream.putNextEntry(new ZipEntry(path + "/"+fileName));
				
				//读取文件;
				while((len=fileInputStream.read(buf)) >0){
					zipOutputStream.write(buf, 0, len);
				}
				//关闭;
				zipOutputStream.closeEntry();
				if(fileInputStream != null){
					fileInputStream.close();
				}
			}
		}
		
		if(zipOutputStream !=null){
			zipOutputStream.close();
		}
	}
	
	/**
	 * 删除目录下所有的文件;
	 * @param path
	 */
	public static boolean deleteExcelPath(File file){
		String[] files = null;
		if(file != null){
			files = file.list();
		}
		
		if(file.isDirectory()){
			for(int i =0;i<files.length;i++){
				boolean bol = deleteExcelPath(new File(file,files[i]));
				if(bol){
					System.out.println("删除成功!");
				}else{
					System.out.println("删除失败!");
				}
			}
		}
		return file.delete();
	}
}

 

分享到:
评论

相关推荐

    java中将多个excel打包成zip文件下载.rar

    java中将多个excel打包成zip文件下载.rar

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

    30万的数据量,生成多个excel最后打包成zip下载,是工程,直接导入就行

    多个excel导出压缩成zip 文件 数据量大导出

    直接可以用的项目。数据量大,导出多个excel然后压缩成zip文件。。。

    poi多线程大数据导出excel文件.zip

    对大数据量的导出excel,用多线程,用倒数计数器对文件进行生成,使用poi,可以支持大数据量的生成,项目中使用的poi是3.1的,上传的是4.1的。

    java excel 读取 用 zip 方式。不用第三方包

    /** * 根据 策划的配置表来生成 json * excel 目前使用的版本为2007,其他版本未测试... * 读取文件 一般用于本地文件的生成, * 二进制的方式,一般用于 后台管理界面 的文件上传后的处理。 * @author wgq * */

    生成excel并打包成zip文件

    生成excel并打包成zip文件,包含主要的生成类和如何打包的代码,主要是嵌套的关系

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

    主要为大家详细介绍了java动态导出excel压缩成zip下载的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

    目前项目有一个需求“数据的离线导入导出”,需要将数据分模块导入到不同的excel,然后压缩成数据包下载

    excelUtil.rar

    java批量处理Excel上传解析后台工具类代码及相关jar包,支持传统mvc框架及时下流行的springBoot、springCloud,亲测亲写可以放心使用。 支持2013和2017版的Excel文件上传处理。支持较大数据量处理。(海量处理)支持...

    java导出100万以上excel大数据样例

    java导出excel大数据,由于excel本身sheet页存储条数的限制,方案一般有:1、导出多个excel,然后将多个excel压缩为zip包,导出;2、导出可以通过excel打开的文本文件;3、导出csv文件(简单格式的)。 本样例以导出...

    java调用perl脚本并压缩zip

    此代码教程主要包含两部分,1、java调用perl脚本生成excel;2、将生成的数据文件进行压缩,并解决了压缩后的文件解压时的乱码问题。 代码已经过系统测试,没任何问题。

    企业后台管理基础框架 hsweb.zip

    自家:hsweb-commons :通用工具类hsweb-easy-orm :为动态表单设计的orm框架hsweb-expands-compress :文件压缩,解压操作hsweb-expands-office :office文档操作( excel读写,模板导出,word模板导出)hsweb-...

    java jdk实列宝典 光盘源代码

    用zip格式压缩 和解压文件;操作Excel文件;操作Pdf文件;自定义日志文件类; 8线程 线程的启动 和停止;线程的互斥;线程的协作;线程join;生产者、消费者问题;线程的优先级;列出虚拟机中所有的线程;守护线程...

    Java JDK实例宝典

    17 用Zip格式压缩和解压缩文件 7. 18 操作Excel文件 7. 19 操作PDF文件 7. 20 自定义日志文件类 第8章 线程 8. 1 定义和启动线程 8. 2 停止线程 8. 3 线程的互斥 8. 4 线程的协作 ...

    java范例开发大全(pdf&源码)

    实例132 生成zip压缩文件 189 实例133 解压缩zip文件 192 实例134 生成Excel文件 194 实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 ...

    ole-drools-xls2drl:用于将Excel电子表格转换为Drools DRL文件的简单Java应用程序

    尽管此应用程序可以将任何格式正确的Excel电子表格转换为Drools DRL文件,但它主要用于为Kuali OLE(开放图书馆环境)应用程序生成Drools规则文件。 要求 Java 1.7 Gradle2.6 构建/设置 安装所需的软件 克隆此存储...

    SqlBuild

    本软件主要实现连接任意多个数据库,读取数据库表定义文件(Excel文件格式),然后使用鼠标拖曳技术自动化生成复杂SQL文,以及执行被生成的SQL文以查看正确性,最后生成您所需要的java代码。(其他语言的代码目前还没...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

Global site tag (gtag.js) - Google Analytics