您的位置:首页 > 运维架构 > Linux

java Zip文件的压缩与解压, 兼容Windows和Linux

2017-12-13 14:29 316 查看
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.Closeable;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipInputStream;
importjava.util.zip.ZipOutputStream;
/**
* zip文件解压与压缩
*@authorzhanglei
*@date创建时间:2016年11月24日
下午5:00:07
*/
public classZipUtil
{

/**
* 压缩文件
*
*@paramfilePath待压缩的文件路径
*@return压缩后的文件
*/
public
static File zip(String filePath) {
File target =null;
File source =newFile(filePath);
if(source.exists())
{
//
压缩文件名=源文件名.zip
String
zipName = source.getName() + ".zip";
target =newFile(source.getParent(),
zipName);
if(target.exists())
{
target.delete();//
删除旧的文件
}
FileOutputStream fos =null;
ZipOutputStream zos =null;
try{
fos =newFileOutputStream(target);
zos =newZipOutputStream(newBufferedOutputStream(fos));
//
添加对应的文件Entry
addEntry("/",
source, zos);
}catch(IOException
e) {
throw
new RuntimeException(e);
}finally{
ZipUtil.close(zos,
fos);
}
}
returntarget;
}
/**
* 解压文件
*
*@paramfilePath压缩文件路径
*/
public
static void unzip(String filePath) {
File source =newFile(filePath);
if(source.exists())
{
ZipInputStream zis =null;
BufferedOutputStream bos =null;
try{
zis =newZipInputStream(newFileInputStream(source));
ZipEntry entry =null;
while((entry
= zis.getNextEntry()) !=null) {
if(!entry.isDirectory()){
File target =newFile(source.getParent(),
entry.getName());
if(!target.getParentFile().exists())
{
//
创建文件父目录
target.getParentFile().mkdirs();
}
//
写入文件
bos
= newBufferedOutputStream(newFileOutputStream(target));
intread
=0;
byte[]
buffer = new byte[1024*10];
while((read
= zis.read(buffer,0, buffer.length))
!= -1) {
bos.write(buffer,0,
read);
}
bos.flush();
ZipUtil.close(bos);

}
}
zis.closeEntry();
}catch(IOException
e) {
throw
new RuntimeException(e);
}finally{
ZipUtil.close(zis,
bos);

}
}
}
/**
* 扫描添加文件Entry
*
*@parambase基路径
*
*@paramsource源文件
*@paramzosZip文件输出流
*@throwsIOException
*/
private
static void addEntry(String base, File source, ZipOutputStream zos)throwsIOException
{
//
按目录分级,形如:/aaa/bbb.txt
// String entry = base + source.getName();
String
entry = source.getName();
if(source.isDirectory())
{
for(File
file : source.listFiles()) {
//
递归列出目录下的所有文件,添加文件Entry
addEntry(entry
+ "/", file, zos);
}
}else{
FileInputStream fis =null;
BufferedInputStream bis =null;
try{
byte[]
buffer = new byte[1024*10];
fis =newFileInputStream(source);
bis =newBufferedInputStream(fis,
buffer.length);
intread
=0;
zos.putNextEntry(newZipEntry(entry));
while((read
= bis.read(buffer,0, buffer.length))
!= -1) {
zos.write(buffer,0,
read);
}
zos.closeEntry();
}finally{
ZipUtil.close(bis,
fis);
}
}
}

/**
* 关闭流对象
*
*@paramcloseables可关闭的流对象列表
*@throwsIOException
*/
private
static void close(Closeable... closeables) {
if(closeables
!=null) {
for(Closeable
closeable : closeables) {
if(closeable
!=null) {
try{
closeable.close();
}catch(IOException
e) {

e.printStackTrace();
}
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java Zip 压缩 解压