读书人

java实现zip压缩后的压缩文件无内容怎

发布时间: 2012-10-09 10:21:45 作者: rapoo

java实现zip压缩后的压缩文件无内容怎么办???

Java code
package toTxt;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;public class ToZip extends MD5Utils{    /**     * 对文件进行压缩     * @param out     * @param file     * @param base     * @throws Exception     */    public void zip(ZipOutputStream out, File file, String base) throws Exception{        System.out.println("正在压缩文档"+file.getName());            ZipEntry entry = new ZipEntry(base);        out.putNextEntry(entry);        FileInputStream in = new FileInputStream(file);        byte[] buffer = new byte[2048];//定义缓冲区        int num;        while((num = in.read()) != -1){            out.write(buffer,0,num);        }        System.out.println("压缩成功!");        in.close();            }    /**     * 读入文件和路径     * @param inputFileName 文件名     * @param zipFileName  路径名     * @throws Exception     */    public void zip(String inputFileName, String zipFileName) throws Exception{        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));        System.out.println("载入文件成功,正在压缩....");        zip(out,new File(inputFileName),"");        out.close();    }        public static void zipper() throws Exception {        ToZip zip = new ToZip();        String inputFileName = path+name;        System.out.println(info);        System.out.println("开始对文件"+inputFileName+"进行加密");        String md5 = MD5Utils.getTxtMD5(new File(path+name));        String zipFileName = path+md5+".zip";        System.out.println("加密成功,获得密文:"+"\t"+md5);        System.out.println(info);        System.out.println("开始对文件"+inputFileName+"进行加密压缩");        boolean flag = new File(zipFileName).exists();        if(flag){            System.out.println("压缩包"+zipFileName+".zip"+"已存在,取消当前压缩操作!");        }else{            zip.zip(inputFileName, zipFileName);        }    }}

客户要求数据生成txt文档,然后进行MD5加密后,最后以密码.zip进行压缩
我压缩之后打开zip查看里面没有内容
求大虾看看什么问题。

[解决办法]
Java code
import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;/**     * 压缩文件     * @param filePaths 存放文件物理路径的集合     * @param fileNames 文件的名称(和文件路径对应,可以是中文)     * @param outPath 压缩文件的输出路径(物理路径)     */    public void reduceFile(List<String> filePaths, List<String> fileNames, String outPath) {        if (null != filePaths && filePaths.size() > 0 && null != fileNames && fileNames.size()== filePaths.size()) {            try {                OutputStream fileOutput = new FileOutputStream(outPath);                ZipOutputStream zipOutput = new ZipOutputStream(fileOutput);                for (int i = 0; i < filePaths.size(); i++) {                    File file = new File(filePaths.get(i));                    if (file.exists() && !file.isDirectory()) {                        InputStream input = new FileInputStream(file);                        ZipEntry entry = new ZipEntry(fileNames.get(i));                        zipOutput.putNextEntry(entry);                        int length = 0;                        while ((length = input.read()) != -1) {                            zipOutput.write(length);                        }                        input.close();                    }                }                zipOutput.setEncoding("GBK");                zipOutput.flush();                zipOutput.closeEntry();                zipOutput.close();                fileOutput.flush();                fileOutput.close();            } catch (Exception e) {                e.printStackTrace();            }        }    } 


[解决办法]
inputFileName, String )前面是要压缩的源文件名
zipFileName是压缩后的压缩包.zip的名称,
base是压缩包里面的文件名,源文件名压缩后在压缩包里名称不一定和原来一样了
你可以用5楼的代码,那就是压缩后的文件名称和原来一样不变

读书人网 >J2EE开发

热点推荐