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查看里面没有内容
求大虾看看什么问题。
解决方案 »
- ibatis生成的SQL语句在plsql中运行正常,排序也正常,但是ibatis自己返回的结果集却排序不正确
- Hibernate 一对一级联更新时 被级联的一方变成了insert.导致主键冲突!
- struts2和标准标签共存的问题
- 我本来项目是用GBK写的,但是都要转成uft-8我把码全换了就出了以下的错求解
- 做上传图片功能的时候出错了,请高手帮忙!!!
- spring注入struts2的问题
- 超链接如何加密?各位学长请指教
- 在同一个事务中能不能同时进行insert和delete操作?
- 严重问题:重新部署不行!!!!!
- 再问高手如何设置不同机器上的j2ee的client.jar
- linux环境下下载文件不成功,文件名有中文就不行,急急急!!
- 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect
最后一个参数不能为空,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);
}
zip(String inputFileName, String zipFileName)前面是要压缩的源文件名,后面是压缩后的文件名,那个base是什么
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();
}
}
}
zipFileName是压缩后的压缩包.zip的名称,
base是压缩包里面的文件名,源文件名压缩后在压缩包里名称不一定和原来一样了
你可以用5楼的代码,那就是压缩后的文件名称和原来一样不变
OK了 ,谢谢。
把
zip(out,new File(inputFileName),"");
第三个参数传进base的值后搞定啦