首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java ZipOutputStream问题

java ZipOutputStream问题
EN

Stack Overflow用户
提问于 2011-06-01 15:47:25
回答 1查看 2.8K关注 0票数 1

我正在尝试编写一个java ZIP util类,如下所示:

代码语言:javascript
复制
package fdbank.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * 解压缩工具类
 * @author ggfan@amarsoft
 *
 */
public class ZIPUtil {

    private static void zip(File[] files, String dest) throws IOException{
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File("dest")));
        for(File file : files){
            zip(file, zos);
        }
        zos.close();
    }

    private static void zip(File file, ZipOutputStream zos) throws IOException{
        byte[] buf = new byte[2048];
        @SuppressWarnings("unused")
        int bytes = 0;
        if(file.isDirectory()){
            ZipEntry entry = new ZipEntry(file.getName());
            zos.putNextEntry(entry);
            for(File subFile : file.listFiles()){
                zip(subFile, zos);
            }
            zos.closeEntry();
        }
        FileInputStream fis = new FileInputStream(file);
        System.out.println(file.getName());
        ZipEntry entry = new ZipEntry(file.getName());
        zos.putNextEntry(entry);
        while((bytes = fis.read(buf)) != -1){
            zos.write(buf);
        }
        zos.closeEntry();
        fis.close();
    }



    public static void compress(int archiveType, File[] files, String dest){

    }

    public static void main(String[] args){
        try {
            System.out.println("gan !!!!");
            zip(new File[]{new File("F:\\ziptest\\1.bmp")},"c:\\ziptest.zip");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我运行了它,没有错误,但是zip文件根本没有被创建!我的代码出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-01 15:53:21

您总是写入一个名为"dest“的文件,并忽略名为destString参数(值为c:\ziptest.zip)。

在第一个zip()方法的第一行将"dest"替换为dest

另外:你不能忽略fis.read()的返回值:如果read()没有填满缓冲区的buf,那么你必须告诉相应的write()调用:

代码语言:javascript
复制
while((bytes = fis.read(buf)) != -1){
    zos.write(buf, 0, bytes);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6197866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档