Java Zip文件处理

来源:互联网 发布:新西兰能用淘宝吗 编辑:程序博客网 时间:2024/05/07 14:13

1从上传的输入流中获取zip文件并解压内容到内存

功能需求:从文件上传中获取zip流,解压并执行文件到数据库

难点:从request中获取文件对象

解决:利用apachefileupload组件。

ServletFileUpload upload = new ServletFileUpload();//建立文件上传对象FileItemIterator iter = upload.getItemIterator(request);//request中解析文件组件while(iter.hasNext()){        FileItemStream item = iter.next();        if(item.getContentType().equals("application/x-zip-compressed")){          InputStream in = item.openStream();//打开文件流         ZipInputStream zipIs = new ZipInputStream(in);//创建zip输入流         ZipEntry zipEntry = null;//zip文件的元素        List<String> strList = new ArrayList<String>();        while((zipEntry = zipIs.getNextEntry())!= null){//如果zip的元素项目             BufferedReader br = new BufferedReader(new InputStreamReader(zipIs));//建立读取IO             StringBuffer s = new StringBuffer();             String str;             while((str = br.readLine()) != null){                 s.append(str);             }             strList.add(s.toString());             zipIs.closeEntry();//读取完成后关闭当前项目              }             zipIs.close();//关闭zip流            }       }

2创建zip文件导出到OutputStream

功能需求:

在内存中,需要将一些数据导出到zip流,供浏览器端下载。利用java.util.zip包下的文件进行zip文件处理。

首先创建ZipOutputStream,创建不同的zipEntry放入到ZipOutputStream,利用BufferedWriter向里面写数据。 

    ZipOutputStream zipos = null;    zipos = new ZipOutputStream(os);//os是OutputStream,如可以是response.getOutputStream。    BufferedWriter bw  = null;//用于向输出流中写数据    bw = new BufferedWriter(new OutputStreamWriter(zipos,"gbk"));    ZipEntry zipEntry = new ZipEntry(fileNameValue);//创建zip文件的组件fileNameValue为文件名    zipos.putNextEntry(zipEntry);//将zipEntry放入到输出流中    bw.write(fileContentValue);//用BufferedWriter写入文件内容,会定位到当前的ZipEntry    bw.flush();    zipos.closeEntry();//关闭当前ZipEntry


response

中设置

    response.setContentType("application/force-download");    response.setHeader("Content-Disposition", "attachment; filename=\""    + java.net.URLEncoder.encode(fileName + ".zip","UTF-8") + "\"");                          out = response.getOutputStream();


 


 

0 0