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

作者:张虹旺 时间:2022-07-13 07:29:27 

本文实例为大家分享了java动态导出excel压缩成zip下载的具体代码,供大家参考,具体内容如下


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();
}
}

来源:https://blog.csdn.net/hongwangzhang/article/details/50764534

标签:java,excel,zip,下载
0
投稿

猜你喜欢

  • Java语言实现最大堆代码示例

    2021-09-22 14:20:44
  • Java多种方式实现生产者消费者模式

    2023-12-13 05:56:16
  • C#实现对字符串进行大小写切换的方法

    2021-07-24 03:30:30
  • Mybatis判断空字符串的问题

    2022-11-18 02:07:00
  • Android控件之RatingBar自定义星级评分样式

    2023-12-22 16:03:33
  • C# MVC 使用LayUI实现下拉框二级联动的功能

    2022-12-07 02:10:05
  • Android通过原生APi获取所在位置的经纬度

    2022-11-12 17:56:14
  • springmvc path请求映射到bean 方法的流程

    2021-10-25 04:42:58
  • Unity实现简单虚拟摇杆

    2023-08-04 17:33:09
  • java与微信小程序实现websocket长连接

    2021-09-10 11:32:11
  • Mybatis自关联查询一对多查询的实现示例

    2021-08-21 04:06:16
  • java获取日期的方法

    2022-04-06 07:31:43
  • Android编程实现ListView滚动提示等待框功能示例

    2022-11-15 13:50:15
  • Mybatis中注解@MapKey的使用详解

    2023-11-24 21:43:35
  • 解决VSCode调试react-native android项目错误问题

    2023-10-14 02:02:11
  • 保证缓存和数据库的数据一致性详解

    2023-11-18 08:10:44
  • ubuntu用wifi连接android调试程序的步骤

    2021-08-05 16:40:27
  • C#事件管理器如何清空所有监听详解

    2022-01-17 14:29:44
  • android监听返回按钮事件的方法

    2021-12-22 04:57:57
  • SpringBoot中发送QQ邮件功能的实现代码

    2022-09-25 10:19:59
  • asp之家 软件编程 m.aspxhome.com