java 打包含有文件夹成zip的问题

public class test{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
FileToZip zip = new FileToZip();
//zip文件压缩
boolean dook = zip.makeFile_Zip("C://test/testqqqqq.zip","C://test/test/");
//zip文件解压
//boolean dook = zip.openFile_Zip("D://test.zip","D://test");
if(dook == true)
{
System.out.println("打包文件成功…");
//System.out.println("解压zip文件成功…");
}
else
{
System.out.println("打包文件失败…");
//System.out.println("解压zip文件失败…");
}
}
}
class FileToZip
{
//=============================================
// 打包文件入口类
// parm:生成文件名,要打包的文件名,或目录
// =============================================
public boolean makeFile_Zip(String outfile, String infile)
{
try
{
// 文件输出流
FileOutputStream fout = new FileOutputStream(outfile);
// zip文件输出流
ZipOutputStream out = new ZipOutputStream(fout);
// 要打包的文件
File file = new File(infile);
// 进行打包zip操作,第一次打包不指定文件夹,因为程序接口中指定了一级文件夹
makeFile_Zip_Do(out, file, "");
// 关闭zip输出流
out.close();
//返回成功
return true;
}
catch(FileNotFoundException e)
{
System.out.println("打包失败(指定的文件不存在)…");
return false;
}
catch(Exception e)
{
System.out.println("打包失败(未知原因)…");
return false;
}
}
// =============================================
// 打包文件操作类
// parm:zip输出流,打包文件,下一级的目录
//=============================================
public void makeFile_Zip_Do(ZipOutputStream out, File file, String dir) throws IOException
{
//如果当前打包的是目录
if (file.isDirectory())
{
//输出进度信息
System.out.println("当前正在打包文件夹:" + file + "…");
//文件列表
File[] files = file.listFiles();
//添加下一个打包目录文件
//out.putNextEntry(new ZipEntry(dir + "/"));
//
dir = dir.length() == 0 ? "" : dir + "/";
for (int i = 0; i < files.length; i++) {
makeFile_Zip_Do(out, files[i], dir + files[i].getName());
}
}
//如果当前打包文件
else
{
//输出进度信息
System.out.println("当前正在打包文件:" + file +" "+ "…");
//

out.putNextEntry(new ZipEntry(dir + file.getName()));

System.out.println(file.getName());
//文件输入流
FileInputStream in = new FileInputStream(file);
System.out.println(file);
int i;
//进行写入
while ((i = in.read()) != -1) {
out.write(i);

}
//关闭输入流
in.close();
}
}
}

可以压缩成zip 的格式但是我自己去手动解压的时候发现压缩的文件名重复了,比如压缩一个testcase.doc ,我手动解压之后文件名称变成testcase.doctestcase.doc 不知道程序哪个地方有问题,请高手帮我看看谢谢

原文地址:https://www.cnblogs.com/lcuzhanglei/p/2990000.html