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查看里面没有内容
求大虾看看什么问题。

解决方案 »

  1.   

    zip(out,new File(inputFileName),"");
    最后一个参数不能为空,zip(ZipOutputStream out, File file, String base)base是定义压缩后的文件名while((num = in.read()) != -1){
                out.write(buffer,0,num);
            }
    改为while((num = in.read(buffer)) != -1){
                out.write(buffer,0,num);
            }
      

  2.   

    base是压缩后文件名,那zipFileName是什么?
    zip(String inputFileName, String zipFileName)前面是要压缩的源文件名,后面是压缩后的文件名,那个base是什么
      

  3.   


    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();
    }
    }
    }
      

  4.   

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

  5.   


    OK了 ,谢谢。

      zip(out,new File(inputFileName),"");
    第三个参数传进base的值后搞定啦