java Zip文件的压缩与解压, 兼容Windows和Linux
来源:互联网 发布:设计公司logo软件 编辑:程序博客网 时间:2024/06/16 11:04
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();
}
}
}
}
}
}
阅读全文
0 0
- java Zip文件的压缩与解压, 兼容Windows和Linux
- java zip文件的压缩与解压
- Java压缩解压zip文件的中文文件名在Windows和Linux环境下乱码问题的解决方案
- Linux下zip文件的压缩与解压操作
- linux 安装zip和压缩解压文件
- Java 实现zip格式的文件压缩与解压
- 用java代码实现文件的zip压缩与解压
- Java 解压和压缩密码zip文件
- java解压和压缩zip文件
- Java解压和压缩带密码的zip文件
- java使用Apache的ant压缩和解压文件(zip)
- Java解压和压缩带密码的zip文件
- Java实现Zip文件的解压和压缩_ZipUtil
- C++ zip文件的解压与压缩
- php zip文件的解压与压缩
- C++ zip文件的解压与压缩
- Linux zip包的压缩与解压
- zip文件的压缩和解压
- vue2.x自定义组件上使用v-model指令
- Spring Cloud (18) | 给Eureka Server加上安全验证
- 原始的stl文档
- 设计模式-java实现动态代理
- 基本包装类型
- java Zip文件的压缩与解压, 兼容Windows和Linux
- Android/iOS/Unity与BLE蓝牙设备连接失败问题指南
- 在HTML中如何动态显示时间
- C++纯虚函数实现接口
- nginx安装记录
- swoole 异步redis客户端环境安装
- c#使用json
- AI-Tensorflow—Windows7安装TensorFlow方法
- java分割多个空格