导出为zip文件

1 要想导出为zip文件,首先必须将内容写入到文件中。创建文件 然后将内容写入到文件中。通过流将内容写入到文件中。
如:File file=new File(fileName_);
FileOutputStream fileOutputStream=new FileOutputStream(file);
String neirong="这是测试的内容";
byte_s=neirong.getBytes();
fileOutputStream.write(byte_s,0,byte_s.length);//这就是通过流将字节数据写入到文件中。
fileOutputStream.close();


2 其次要想导出为zip文件,需要创建zip格式的文件。同时将内容写入到zip文件中去。
如:File zipFile=new File("COMPLETE"+new Date().getTime()+".zip");
FileOutputStream zipOut;
//以上是将创造一个zip格式的文件


zipOut = new FileOutputStream(zipFile);
ZipOutputStream zip=new ZipOutputStream(zipOut);

ZipEntry zipEntry1=new ZipEntry("aaa.txt");
zip.putNextEntry(zipEntry1);
byte [] byte_s="测试内容aaa".getBytes();
zip.write(byte_s,0,byte_s.length);

zip.close();
zipOut.close();
//通过ZipOutputStream将内容写入到zip格式的文件中。期间如要需要加入什么文件。通过ZipEntry来添加。
一个ZipEntry表示一个文件或一个文件夹。


3 ZipOutputStream是将流写入到zip格式的文件中。ZipEntry是zip格式文件中的子单元。可以表示文件或文件夹。
如加入文件:
File zipFile=new File("COMPLETE"+new Date().getTime()+".zip");
FileOutputStream zipOut;
//以上是将创造一个zip格式的文件


zipOut = new FileOutputStream(zipFile);
ZipOutputStream zip=new ZipOutputStream(zipOut);

ZipEntry zipEntry1=new ZipEntry("aaa.txt");
zip.putNextEntry(zipEntry1);
byte [] byte_s="测试内容aaa".getBytes();
zip.write(byte_s,0,byte_s.length);

zip.close();
zipOut.close();


如加入文件夹:
File zipFile=new File("COMPLETE"+new Date().getTime()+".zip");
FileOutputStream zipOut;
//以上是将创造一个zip格式的文件


zipOut = new FileOutputStream(zipFile);
ZipOutputStream zip=new ZipOutputStream(zipOut);

ZipEntry zipEntry1=new ZipEntry(文件夹的名称+"/");//文件夹的名称同时加上"/"
zip.putNextEntry(zipEntry1);
byte [] byte_s="测试内容aaa".getBytes();
zip.write(byte_s,0,byte_s.length);

zip.close();
zipOut.close();


ZipEntry和ZipOutputStream是分不开的。


4 现在如果zip格式的文件已经创造好了,这时就要读取zip格式的文件。得到字节数组。就像读取正常的文件那样
如:ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
FileInputStream fileInput = new FileInputStream(zipFile);

byte [] byte_i=new byte[1024];
int num_i=0;
while((num_i=(fileInput.read(byte_i)))>-1){
byteOut.write(byte_i,0,num_i);
}
byte [] byte_z=byteOut.toByteArray();

fileInput.close();
byteOut.close();


5 将zip格式的文件读取出来后得到字节数组。通过response来写入即可。这时要设置一些参数。
如:resp.setContentType("application/zip");
resp.setHeader("Content-Disposition","attachment;filename="+zipFile.getName()+"");
OutputStream fileOutputStream = resp.getOutputStream();
fileOutputStream.write(byte_z);
fileOutputStream.flush();
fileOutputStream.close();
这样就可以得到zip格式的文件了。在前台界面上。不过要记住。是通过前台的response直接调用。


6 前台网页中直接调用后台的方法。通过jsp语法来写。例如export.jsp的写法
如:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 new com.service.DemoService().exportService(request,response);
%>


这时就需要在一个jsp中的js方法中来调用这个要导出的jsp文件 
如:var infoWindow = window.open("export.jsp", "_blank","width=500,height=400");




完整的例子。如下:
前台js方法:
function export_onclick(){
  var infoWindow = window.open("export.jsp", "_blank","width=500,height=400");
  }


export.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 new com.service.DemoService().exportService(request,response);
%>




DemoService类的exportService方法:
public void exportService(HttpServletRequest req,HttpServletResponse resp){


File zipFile=new File("COMPLETE"+new Date().getTime()+".zip");
System.out.println("位置:"+zipFile.getAbsolutePath());
FileOutputStream zipOut;
try {
zipOut = new FileOutputStream(zipFile);
ZipOutputStream zip=new ZipOutputStream(zipOut);

ZipEntry zipEntry1=new ZipEntry("aaa.txt");
zip.putNextEntry(zipEntry1);
byte [] byte_s="测试内容aaa".getBytes();
zip.write(byte_s,0,byte_s.length);

zip.close();
zipOut.close();

ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
FileInputStream fileInput = new FileInputStream(zipFile);

byte [] byte_i=new byte[1024];
int num_i=0;
while((num_i=(fileInput.read(byte_i)))>-1){
byteOut.write(byte_i,0,num_i);
}
byte [] byte_z=byteOut.toByteArray();

fileInput.close();
byteOut.close();
//application/x-zip-compressed
resp.setContentType("application/zip");
//resp.setContentType("application/x-zip-compressed");
resp.setHeader("Content-Disposition","attachment;filename="+zipFile.getName()+"");
//resp.setHeader("Content-Disposition","attachment;filename="+zipFile.getName()+"");
//resp.setHeader("Location", zipFile.getName());
//resp.setHeader("Content-Disposition", "attachment;filename="
//+ zipFile.getName());


OutputStream fileOutputStream = resp.getOutputStream();
fileOutputStream.write(byte_z);
fileOutputStream.flush();
fileOutputStream.close();
//return null;

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}


必须是前台的通过jsp语法直接调用后台的方法。参数为response才行。要记住。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值