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();
}
}
}
}
}
}
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文件的中文文件名在Windows和Linux环境下乱码问题的解决方案
- linux下解压windows压缩的zip文件,文件名乱码
- java-在Java中操作Zip文件,压缩/解压
- Java解压和压缩带密码的zip文件
- windows下压缩的文件在linux下解压后中文乱码问题
- java支持跨平台获取cpuid、主板id、硬盘id、mac地址 (兼容windows、Linux)
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- 通过java解决linux下解压来自window生成的zip文件的乱码问题
- Java解压和压缩带密码的zip文件(转…
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java 压缩解压zip文件--使用ant支持中文
- 有一个小技巧在windows用.rar在压缩里面选择压缩成.zip就方便用于linux里面的解压了。
- linux_zip文件解压和压缩方法
- Java 解压和压缩密码zip文件
- Linux下压缩Windows下解压文件名乱码问题
- java对zip文件的解压处理直接访问压缩文件
- java-在Java中操作Zip文件,压缩/解压
- linux下如何解压windows 下的RAR压缩文件
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码