java使用ZIP对多级目录文件压缩及解压操作接口
import java.io.File;黄河在咆哮
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
/**
*
* @description:ZIP解压缩文件的工具类,文件可以是多级目录的结构
*    (使用JDK的ZipEntry存在文件名中文乱码问题,用apache-tools的则不会)
* @author dongg
* @date 2013-12-14 e-mail:dg90xf@163
*/
public class ZipUtil
{
/**
*
* @description:压缩文件操作
* @param filePath
*            要压缩的文件路径
* @param descDir
*            压缩文件保存的路径
*/
public static void zipFiles(String filePath, String descDir)
{
ZipOutputStream zos = null;
try
{
// 创建一个Zip输出流
zos = new ZipOutputStream(new FileOutputStream(descDir));
// 启动压缩
startZip(zos, "", filePath);
//  System.out.println("******************压缩完毕********************");
}
catch (IOException e)
{
// 压缩失败,则删除创建的文件
File zipFile = new File(descDir);
if (ists())
{
zipFile.delete();
丽水美食
}
//  System.out.println("******************压缩失败********************");
e.printStackTrace();
}
finally
{
try
{
if (zos != null)
{
zos.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}致敬军人的经典句子10个字
/**
*
* @description:对目录中所有文件递归遍历进行压缩
* @param zos
*            ZIP压缩输出流
* @param oppositePath
*            在zip文件中的相对路径
* @param directory
*            要压缩的文件的路径
* @throws IOException
*/
private static void startZip(ZipOutputStream zos, String oppositePath,
String directory) throws IOException
{
File file = new File(directory);
if (file.isDirectory())
{
// 如果是压缩目录
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++)
{
File aFile = files[i];
if (aFile.isDirectory())
{
/
/ 如果是目录,修改相对地址
String newOppositePath = oppositePath + Name() + "/";
// 压缩目录,这是关键,创建一个目录的条目时,需要在目录名后面加多一个"/"
ZipEntry entry = new ZipEntry(oppositePath + Name() + "/");
zos.putNextEntry(entry);
zos.closeEntry();
// 进行递归调用
startZip(zos, newOppositePath, Path());
}
else
{
/
/ 如果不是目录,则进行压缩
zipFile(zos, oppositePath, aFile);
}
}
}
else
{
// 如果是压缩文件,直接调用压缩方法进行压缩
zipFile(zos, oppositePath, file);
}
}
/
**
*
* @description:
压缩单个文件到目录中
* @param zos
*            zip输出流
* @param oppositePath
*            在zip文件中的相对路径
* @param file
*            要压缩的的文件
*/
private static void zipFile(ZipOutputStream zos, String oppositePath,
File file)
{
// 创建一个Zip条目,每个Zip条目都是必须相对于根路径
InputStream is = null;snh48成员名单介绍
try
{
ZipEntry entry = new ZipEntry(oppositePath + Name());
// 将条目保存到Zip压缩文件当中
zos.putNextEntry(entry);
// 从文件输入流当中读取数据,并将数据写到输出流当中.
is = new FileInputStream(file);
int length = 0;
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
while ((length = is.read(buffer, 0, bufferSize)) >= 0)
{
zos.write(buffer, 0, length);
}
zos.closeEntry();
}
catch (IOException ex)
{
ex.printStackTrace();
}
finally
{
try
{
if (is != null)
{
is.close();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
/*********************************** 华丽的分割线 ***********************************/
/**
*
* @description:解压文件操作
* @param zipFilePath
*            zip文件路径
* @param descDir
*            解压出来的文件保存的目录
* @throws IOException
*/
public static void unZipFiles(String zipFilePath, String descDir)
{
File zipFile = new File(zipFilePath);
File pathFile = new File(descDir);
if (!ists())
{
pathFile.mkdirs();
}
ZipFile zip = null;
InputStream in = null;
OutputStream out = null;
try
{
zip = new ZipFile(zipFile);
for (Enumeration<? extends ZipEntry> entries = ies(); entries.hasMoreElements();)
{
ZipEntry entry = Element();
大主宰 起点String zipEntryName = Name();
in = InputStream(entry);
含笑的成语String outPath = (descDir + "/" + zipEntryName).replaceAll("\\*", "/");;
// 判断路径是否存在,不存在则创建文件路径
File file = new File(outPath.substring(0,outPath.lastIndexOf('/')));
if (!ists())
{
file.mkdirs();
}
// 判断文件全路径是否为文件夹,如果是上面已经创建,不需要解压
if (new File(outPath).isDirectory())
{
continue;
}
out = new FileOutputStream(outPath);
byte[] buf1 = new byte[4 * 1024];
int len;
while ((len = in.read(buf1)) > 0)
{
out.write(buf1, 0, len);
}
in.close();
out.close();
}
//  System.out.println("******************解压完毕********************");
}
catch (IOException e)
{
pathFile.delete();
//  System.out.println("******************解压失败********************");
e.printStackTrace();
}
finally
{
try
{
if (zip != null)
{
zip.close();
}
if (in != null)
{
in.close();
}
if (out != null)
{
out.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。