社区
Java SE
帖子详情
java.util.zip包 压缩、解压缩求解
dr_lou
2007-06-21 10:08:48
要求:可以压缩、解压缩含有中文文件名的文件和文件夹
...全文
392
1
打赏
收藏
java.util.zip包 压缩、解压缩求解
要求:可以压缩、解压缩含有中文文件名的文件和文件夹
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
eric06s
2007-06-21
打赏
举报
回复
java.util.zip & Servlet 实现动态打包网络传输[转贴kingjava]
问题
我在写一个基于jsp/servlet的web应用程序,其中客户有一个需求,批量下载文件,当然首先需要先用java.util.zip打包(除了打包,没想到其他方法).
由于是事先不知道客户要下哪个目录下的文件,并且文件目录下的文件也是会变的,所有要求动态的打包.
方案
有两种方案
1)先将选定的的文件,打包放入临时文件夹,再让用户下载.
2)将选定的文件,边打包,边下载.
难点
1)由于基于http协议的web是无连接的,将文件提供给用户下载,用户什么时候下载完成,服务器无法知道.而临时文件夹空间也是有限的,所以web服务器要把生成的zip文件删除.但要捕获到用户下载完成比较难.特别是文件传输中,用户突然把浏览器关闭.
2)平常我们用zip类都是通过FileOutPutStream向磁盘写文件,没有通过网络向客户端写文件的,当然也不是说不可以,think in java中文第二版438页就说到"GZIP和ZIP程序库并非只能用来处理文件的压缩-他们当然可以压缩任何形式的数据,包括即将被传送至网络连线的数据。",遗憾的是Bruce Eckel没有留下事例代码.
解决
1)其实要删除文件也不是没有方法,用Session Tracking,实现HttpSessionBindingListener接口的valueUnbound方法在移除session对象的时候web服务器会自动调用这个方法,可以在这里删除临时生成的文件.(由于比较烦琐,所以没有实现,改用第二种方案)
2)通过HttpServletResponse的getOutputStream()方法获得ServletOutputStream,然后再得到ZipOutputStream对象就可以了,其他的和普通的文件读写一样.
源代码:
package done.servlet;
import java.io.*;
import java.util.*;
import java.util.zip.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ZipDownLoad extends HttpServlet {
/**
* Handles GET requests
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应头,MIMEtype告诉浏览器传送的文件类型
response.setContentType( "application/x-zip-compressed" );
//inline;参数让浏览器弹出下载窗口,而不是在网页中打开文件.filename设定文件名
response.setHeader( "Content-Disposition" , "inline; filename=download.zip" );
//通过response获得ServletOutputStream对象
ServletOutputStream sos=response.getOutputStream();
//获得ZipOutputStream对象
ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(sos));
//得到要下载的文件对象
BufferedInputStream in=new BufferedInputStream(new FileInputStream("c:\\grub.exe"));
//在zip文件中新建一个grub.exe文件
out.putNextEntry(new ZipEntry("grub.exe"));
//逐字读出写入
int c;
while((c = in.read())!=-1){
out.write(c);
}
in.close();
out.close(); //这里一句一定要,要不就会打开文件出错
}
/**
* Handles POST requests
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
/**
* Destroy the servlet
*/
public void destroy () {
}
}
http://www.blog.edu.cn/user2/56202/archives/2006/1310402.shtml
基于
Java
完成数据结构课程设计【100012654】
课程设计题目
包
含:1、数据
压缩
与
解
压缩
;2、24点扑克牌游戏;3、16枚硬币的反面问题;4、线性表、树、图的操作和演示;5、农夫过河;6、迷宫问题;
文件夹
解
压缩
问题 出错
求解
源代码如下:求各位大牛帮忙看看哪出错了 import
java
.io.File ; import
java
.io.OutputStream ; import
java
.io.InputStream ; import
java
.
util
.
zip
.
Zip
Entry ; import
java
.
util
.
zip
.
Zip
File ; import
java
.
util
.
zip
.
Zip
InputS...
SMT约束
求解
器Z3 Prover的
Java
绑定
Z3是由微软公司开发的一个优秀的SMT
求解
器(也就定理证明器),它能够检查逻辑表达式的可满足性。 最近要在
Java
代码使用Z3,走了很多弯路,费了大约一周时间才搭好环境,所以写下此经验帖: Z3 Prover的
Java
绑定 ...
MOC喷管二维分析
JAVA
实现
Java
拥有庞大的标准类库,这使得开发者可以不必从零开始构建每一个程序功能。
Java
标准库
包
含在rt.jar中,它是
Java
运行时环境的一部分,
包
含
java
.lang
java
.
util
java
.io等
包
。在创建自定义类时,开发者可以广泛地利用这些类库来加速开发过程。在上面的示例中,我们使用了类来创建一个列表,并使用
Java
8的流(Streams)功能来遍历和打印列表中的每个元素。
各大it企业编程笔试题,答案自己做的,大家批评指正(更新中)
一、8月15日,百度2道面试题: 1、来自《编程之美》的概率题:一个桶里面有白球、黑球各100个,现在按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入一个黑球; ii、如果取出的是两个异色的求,就再放入一个白球。 问:最后桶里面只剩下一个黑球的概率是多少? package A1; import
java
.
util
.R
Java SE
62,635
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章