java 实现生成txt压缩-java 实现生成txt压缩后返回客户端,不知道哪错了。生成的压缩文件都是损坏的

问题描述

java 实现生成txt压缩后返回客户端,不知道哪错了。生成的压缩文件都是损坏的

try {
OutputStream os = res.getOutputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zipOut = new ZipOutputStream(baos);
ZipEntry entry = new ZipEntry("goods.txt");
zipOut.putNextEntry(entry);
zipOut.write(bytes, 0, bytes.length);

               res.reset();
               res.setContentType("application/OCTET-STREAM;charset=GBK");
               res.setHeader("pragma", "no-cache");
               res.addHeader("Content-Disposition", "attachment;filename=goods.zip");
               os.write(baos.toByteArray(), 0, baos.toByteArray().length);
               zipOut.flush();
               zipOut.closeEntry();
               baos.close();
               zipOut.close();
               os.close();
          } catch (Exception e) {
                logger.error(e,e);
            }

解决方案

请参看,希望对你有用
http://snowolf.iteye.com/blog/644591

解决方案二:

在os.close();之前添加os.flush();试一下呢

解决方案三:

有谁遇到过这种问题吗?

解决方案四:

不要沉了,有人会吗?

解决方案五:

我感觉是不是你的关闭顺序有问题啊。
FileOutputStream f=new FileOutputStream("text.zip");
CheckedOutputStream csum=new CheckedOutputStream(f,new Adler32());
ZipOutputStream zos=new ZipOutputStream(csum);
BufferedOutputStream out = new BufferedOutputStream(zos);
zos.setComment("A test of Java Ziping!");

BufferedReader in =new BufferedReader(new FileReader("123.txt"));
zos.putNextEntry(new ZipEntry("123.txt"));
int c;
while((c = in.read()) != -1){
out.write(c);
}
in.close();
out.flush();
out.close();
}

解决方案六:

问题已解决:

/**
* 压缩数据返回客户端
* @param req
* @param res
* @param bytes
* @throws Exception
*/
public static void zip(HttpServletRequest req, HttpServletResponse res,byte[] bytes) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ByteArrayOutputStream baos = new ByteArrayOutputStream();

        compress(bais, baos);
        OutputStream os = res.getOutputStream();
        res.reset();
        res.setContentType("application/zip");
        res.setHeader("pragma", "no-cache");
        res.addHeader("Content-Disposition", "attachment;filename=goods.zip");
        byte[] output = baos.toByteArray();  

        os.write(output, 0, output.length);

        baos.flush();
        baos.close();
        bais.close();
        os.close();
    }

     /**
     * 数据压缩
     *
     * @param is
     * @param os
     * @throws Exception
     */
    public static void compress(InputStream is, OutputStream os)
            throws Exception {  

        ZipOutputStream zipOut = new ZipOutputStream(os);
        ZipEntry entry = new ZipEntry("goods.txt");
        zipOut.putNextEntry(entry);

        int count;
        byte data[] = new byte[2048*2];
        while ((count = is.read(data, 0, data.length)) != -1) {
            zipOut.write(data, 0, count);
        }
        zipOut.closeEntry();
        zipOut.finish();
        zipOut.flush();
        zipOut.close();
    }
时间: 2024-09-21 19:23:28

java 实现生成txt压缩-java 实现生成txt压缩后返回客户端,不知道哪错了。生成的压缩文件都是损坏的的相关文章

android-Android编程自动生成的r.java文件,里面的代码特别多

问题描述 Android编程自动生成的r.java文件,里面的代码特别多 和视频教程里面看到的都不一样.我用的Android6.0SDK.刚接触Android,什么都不懂,求助各位.谢谢 解决方案 Android R.java文件没有生成android R.java资源文件不自动生成的原因Android: 如何手工生成R.java文件? 解决方案二: 由系统管理的,不用动它. 解决方案三: 这个文件不用动,里边放的是宏以及函数地址. 解决方案四: 系统自动创建的R.java,这个文件相当于资源字

怎么用axis把wsdl文件生成相应的java类

问题描述 怎么用axis把wsdl文件生成相应的java类,我都已经配置好axis了,发布服务也可以了,就是我现在手里有wsdl文件,想把他生成JAVA类,怎么生成???加我QQ290612821,或者是推荐几个地址,直接告诉我最好啦,嘿嘿 问题补充:我按文章里写的下载了,然后运行后没有在source里生成对应的文件,点完马上就关闭了,是不是命令有问题呀,enet_java 写道 解决方案 引用我按文章里写的下载了,然后运行后没有在source里生成对应的文件,点完马上就关闭了,是不是命令有问题

IBM BPM配置生成Java Integration Service集成到Java组件

本文还讨论了一个简单的操作场景,通过传递简单的.基于数组的数据来调用本地方法. IBM Business Process Manager V7.5 是一个全面的.可使用的业务流程管理平台,提供业务流程的管理和可视性.它将来自 WebSphere® Process Server.WebSphere Lombardi Edition 和 IBM Integration Designer 的关键功能集成到一个统一的用户环境(包括统一的库.创建工具和运行时环境)中,以便设计.执行.监视和优化业务流程.I

你不可错过的二维码生成与解析-java后台与前端js都有

1.二维码分类   二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型. 线性堆叠式二维码 编码原理: 建立在一维条码基础之上,按需要堆积成两行或多行. 图示: 矩阵式二维码 最常用编码,原理: 在一个矩形空间通过黑白像素在矩阵中的不同分布进行编码.在矩阵相应的位置上,用点(方点.圆点或其它形状)的出现表示二进制"1",点的不出现表示二进制的"0" 图示: 邮政码 通过不同长度的条进行编码,主要用于邮政编码. 2.QR Code   现在最常用的就是

YUICompressor+ANT压缩Java Web工程前端js/css文件

最近team里有个jsp工程想要做一些性能上的优化, 需要对工程里的前端部分(主要是js和css)做一些压缩(这是一个老旧重的工程,重构的成本非常大,也没有人力,只能一步一步去优化).想到与传统ANT工具结合的比较好的yuicompressor. yuicompressor下载 下载地址: http://maven.aliyun.com/nexus/service/local/repositories/central/content/com/yahoo/platform/yui/yuicompr

JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了.如果你初学,不懂IO流,你可以从前往后慢慢看,但是你工作了一段时间你会发现,流的使用场景以及技术点是非常的强硬的,我们势必要掌握这个知识点,如果你觉得翻阅API比较鼓噪,看视频得不到精髓,看书看不到要点,你就跟随我的JAVA之旅,一起去探索吧! 一.I/O概述 I/O全名:Input Output

c++-C++,huffman树编码的压缩软件输出到txt的问题

问题描述 C++,huffman树编码的压缩软件输出到txt的问题 string line; while(getline(ifsa2,line)) { for(int m=0;m<line.length();m++) { //cout<<line[m]; if(line[m]!=' ') { for(int i=0;i<leafs.size();i++) { if(leafs[i].data==line[m]) { break; } } for(int j=0;j<tree.

Java操作Mongodb 保存/读取java对象到/从mongodb

Mongodb官方提供的Java驱动,保存与读取,需要的者是DBObject对象,这是一个接口,实现put,get等方法,跟map类似,如果我们要直接把普通的java对象保存到mongodb,就需要先转换成DBObject对象,或者直接实现DBObject接口,操作起来相当复杂.还好,monodb驱动带了把json转换成DBObject对象的功能,加上Google的Gson,就可以实现把普通的对象保存到mongodb中.如果要从mogodb中读出对象,反过来操作即可,但有一点需要注意的是,mon

java如何动态加载.java文件

问题描述 java如何动态加载.java文件 运行的web工程(tomcat容器),java如何动态加载.java文件! 解决方案 Java 动态加载Java 动态加载JAVA 动态加载 解决方案二: java文件最终会转化成class文件,加载java文件还是要重新部署tomcat 解决方案三: 不晓得你的意思,你的意思是tomcat容器启动的时候,指定运行某个类? 解决方案四: 如果楼主只是觉得tomcat在调试的时候修改了内容需要重新部署很麻烦,楼主可以通过双击tomcat服务,然后修改P