java对文件压缩与解压缩操作
2016-10-14 22:34
507 查看
1. 文件的压缩
[java] view
plain copy
/**
* 压缩文件,支持文件和目录
* @param srcFile 待压缩的文件
* @param desPathName 压缩后的文件名(带路径)
*/
public static void zip(File srcFile, String desPathName) {
if (!srcFile.exists()) {
log.error("文件{}不存在:", srcFile.getAbsolutePath());
return;
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(desPathName);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
zipByType(srcFile, out, "");
out.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
/**
* 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法
* @param file 待压缩的文件
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipByType(File file, ZipOutputStream out, String basedir) {
/* 判断是目录还是文件 */
if (file.isDirectory()) {
zipDirectory(file, out, basedir);
} else {
zipFile(file, out, basedir);
}
}
/**
* 压缩一个目录
* @param dir 待压缩的目录
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists()) {
log.error("文件{}不存在:", dir.getAbsolutePath());
return;
}
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
/* 递归 */
zipByType(files[i], out, basedir + dir.getName() + "/");
}
}
/**
* 压缩一个文件
* @param file 待压缩的文件
* @param out 压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
log.error("文件{}不存在", file.getAbsolutePath());
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[8192];
while ((count = bis.read(data, 0, data.length)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
2. 文件的解压缩
[html] view
plain copy
/**
* 解压缩文件操作
*
* @param srcPathName
* 被解压的压缩文件名(带路径)
* @param desPathName
* 解压后的目录
*/
public static void unzip(String zipFileName, String desPathName) {
File zipFile = new File(zipFileName);
unzip(zipFile, desPathName);
}
/**
* 解压缩文件操作
*
* @param zipFile
* 被解压的压缩文件
* @param targetPath
* 解压后的目录
*/
public static void unzip(File zipFile, String targetPath) {
if (!zipFile.exists()) {
log.error("文件{}不存在", zipFile.getAbsolutePath());
}
try {
File pathFile = new File(targetPath);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (targetPath + zipEntryName).replaceAll("\\*", "/");
// 判断路径是否存在,不存在则创建文件路径
if (outPath.indexOf('/') > 0) {
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if (!file.exists()) {
file.mkdirs();
}
}
// 判断文件全路径是否为文件夹,如果是上面已经创建,不需要解压
if (new File(outPath).isDirectory()) {
continue;
}
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
in.close();
out.close();
}
zip.close();
} catch (IOException e) {
log.error("解压缩文件异常:", e);
return;
}
}
3. 附工具类ZipUtil.java
[html] view
plain copy
package com.morris.util.file;
import java.io.BufferedInputStream;
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.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 文件的压缩与解压
* @author Morris
*
*/
public class ZipUtil {
private static final transient Logger log = LoggerFactory.getLogger(ZipUtil.class);
// ------------------------------压缩文件begin----------------------------------------
/**
* 压缩文件,支持文件和目录
* @param srcPathName 被压缩的文件名(带路径),压缩到当前目录下
*/
public static void zip(String srcPathName) {
zip(new File(srcPathName));
}
/**
* 执行压缩文件操作,支持文件和文件夹
*
* @param srcFile 被压缩的文件,压缩到当前目录下
*/
public static void zip(File srcFile) {
if (!srcFile.exists()) {
log.info("文件{}不存在!", srcFile.getAbsolutePath());
}
String desFileName = srcFile.getName();
if (!srcFile.isDirectory()) {
desFileName = desFileName.substring(0, desFileName.lastIndexOf("."));
}
desFileName += ".zip";
String desFile = srcFile.getParent() + "/" + desFileName;
zip(srcFile, desFile);
}
/**
* 执行压缩文件操作,支持文件和文件夹
*
* @param srcPathName
* 被压缩的文件名(带路径)
* @param desPathName
* 压缩后的文件名(带路径)
*/
public static void zip(String srcPathName, String desPathName) {
File srcFile = new File(srcPathName);
zip(srcFile, desPathName);
}
/**
* 压缩文件,支持文件和目录
* @param srcFile 待压缩的文件
* @param desPathName 压缩后的文件名(带路径)
*/
public static void zip(File srcFile, String desPathName) {
if (!srcFile.exists()) {
log.error("文件{}不存在:", srcFile.getAbsolutePath());
return;
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(desPathName);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
zipByType(srcFile, out, "");
out.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
/**
* 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法
* @param file 待压缩的文件
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipByType(File file, ZipOutputStream out, String basedir) {
/* 判断是目录还是文件 */
if (file.isDirectory()) {
zipDirectory(file, out, basedir);
} else {
zipFile(file, out, basedir);
}
}
/**
* 压缩一个目录
* @param dir 待压缩的目录
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists()) {
log.error("文件{}不存在:", dir.getAbsolutePath());
return;
}
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
/* 递归 */
zipByType(files[i], out, basedir + dir.getName() + "/");
}
}
/**
* 压缩一个文件
* @param file 待压缩的文件
* @param out 压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
log.error("文件{}不存在", file.getAbsolutePath());
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[8192];
while ((count = bis.read(data, 0, data.length)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
// ------------------------------压缩文件end------------------------------------------
// ------------------------------解压缩文件begin--------------------------------------
/**
* 解压缩文件操作,解压到到当前目录下
*
* @param zipFile
* 被解压的压缩文件名(带路径)
*/
public static void unzip(String zipFileName) {
File zipFile = new File(zipFileName);
unzip(zipFile);
}
/**
* 解压缩文件操作,解压到到当前目录下
*
* @param zipFile
* 被解压的压缩文件
*/
public static void unzip(File zipFile) {
if (!zipFile.exists()) {
log.error("文件{}不存在", zipFile.getAbsolutePath());
}
String targetPath = zipFile.getParent() + "/";
unzip(zipFile, targetPath);
}
/**
* 解压缩文件操作
*
* @param srcPathName
* 被解压的压缩文件名(带路径)
* @param desPathName
* 解压后的目录
*/
public static void unzip(String zipFileName, String desPathName) {
File zipFile = new File(zipFileName);
unzip(zipFile, desPathName);
}
/**
* 解压缩文件操作
*
* @param zipFile
* 被解压的压缩文件
* @param targetPath
* 解压后的目录
*/
public static void unzip(File zipFile, String targetPath) {
if (!zipFile.exists()) {
log.error("文件{}不存在", zipFile.getAbsolutePath());
}
try {
File pathFile = new File(targetPath);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (targetPath + zipEntryName).replaceAll("\\*", "/");
// 判断路径是否存在,不存在则创建文件路径
if (outPath.indexOf('/') > 0) {
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if (!file.exists()) {
file.mkdirs();
}
}
// 判断文件全路径是否为文件夹,如果是上面已经创建,不需要解压
if (new File(outPath).isDirectory()) {
continue;
}
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
in.close();
out.close();
}
zip.close();
} catch (IOException e) {
log.error("解压缩文件异常:", e);
return;
}
}
// ------------------------------解压缩文件end----------------------------------------
}
[java] view
plain copy
/**
* 压缩文件,支持文件和目录
* @param srcFile 待压缩的文件
* @param desPathName 压缩后的文件名(带路径)
*/
public static void zip(File srcFile, String desPathName) {
if (!srcFile.exists()) {
log.error("文件{}不存在:", srcFile.getAbsolutePath());
return;
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(desPathName);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
zipByType(srcFile, out, "");
out.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
/**
* 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法
* @param file 待压缩的文件
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipByType(File file, ZipOutputStream out, String basedir) {
/* 判断是目录还是文件 */
if (file.isDirectory()) {
zipDirectory(file, out, basedir);
} else {
zipFile(file, out, basedir);
}
}
/**
* 压缩一个目录
* @param dir 待压缩的目录
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists()) {
log.error("文件{}不存在:", dir.getAbsolutePath());
return;
}
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
/* 递归 */
zipByType(files[i], out, basedir + dir.getName() + "/");
}
}
/**
* 压缩一个文件
* @param file 待压缩的文件
* @param out 压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
log.error("文件{}不存在", file.getAbsolutePath());
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[8192];
while ((count = bis.read(data, 0, data.length)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
2. 文件的解压缩
[html] view
plain copy
/**
* 解压缩文件操作
*
* @param srcPathName
* 被解压的压缩文件名(带路径)
* @param desPathName
* 解压后的目录
*/
public static void unzip(String zipFileName, String desPathName) {
File zipFile = new File(zipFileName);
unzip(zipFile, desPathName);
}
/**
* 解压缩文件操作
*
* @param zipFile
* 被解压的压缩文件
* @param targetPath
* 解压后的目录
*/
public static void unzip(File zipFile, String targetPath) {
if (!zipFile.exists()) {
log.error("文件{}不存在", zipFile.getAbsolutePath());
}
try {
File pathFile = new File(targetPath);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (targetPath + zipEntryName).replaceAll("\\*", "/");
// 判断路径是否存在,不存在则创建文件路径
if (outPath.indexOf('/') > 0) {
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if (!file.exists()) {
file.mkdirs();
}
}
// 判断文件全路径是否为文件夹,如果是上面已经创建,不需要解压
if (new File(outPath).isDirectory()) {
continue;
}
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
in.close();
out.close();
}
zip.close();
} catch (IOException e) {
log.error("解压缩文件异常:", e);
return;
}
}
3. 附工具类ZipUtil.java
[html] view
plain copy
package com.morris.util.file;
import java.io.BufferedInputStream;
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.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 文件的压缩与解压
* @author Morris
*
*/
public class ZipUtil {
private static final transient Logger log = LoggerFactory.getLogger(ZipUtil.class);
// ------------------------------压缩文件begin----------------------------------------
/**
* 压缩文件,支持文件和目录
* @param srcPathName 被压缩的文件名(带路径),压缩到当前目录下
*/
public static void zip(String srcPathName) {
zip(new File(srcPathName));
}
/**
* 执行压缩文件操作,支持文件和文件夹
*
* @param srcFile 被压缩的文件,压缩到当前目录下
*/
public static void zip(File srcFile) {
if (!srcFile.exists()) {
log.info("文件{}不存在!", srcFile.getAbsolutePath());
}
String desFileName = srcFile.getName();
if (!srcFile.isDirectory()) {
desFileName = desFileName.substring(0, desFileName.lastIndexOf("."));
}
desFileName += ".zip";
String desFile = srcFile.getParent() + "/" + desFileName;
zip(srcFile, desFile);
}
/**
* 执行压缩文件操作,支持文件和文件夹
*
* @param srcPathName
* 被压缩的文件名(带路径)
* @param desPathName
* 压缩后的文件名(带路径)
*/
public static void zip(String srcPathName, String desPathName) {
File srcFile = new File(srcPathName);
zip(srcFile, desPathName);
}
/**
* 压缩文件,支持文件和目录
* @param srcFile 待压缩的文件
* @param desPathName 压缩后的文件名(带路径)
*/
public static void zip(File srcFile, String desPathName) {
if (!srcFile.exists()) {
log.error("文件{}不存在:", srcFile.getAbsolutePath());
return;
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(desPathName);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
zipByType(srcFile, out, "");
out.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
/**
* 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法
* @param file 待压缩的文件
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipByType(File file, ZipOutputStream out, String basedir) {
/* 判断是目录还是文件 */
if (file.isDirectory()) {
zipDirectory(file, out, basedir);
} else {
zipFile(file, out, basedir);
}
}
/**
* 压缩一个目录
* @param dir 待压缩的目录
* @param out 文件压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists()) {
log.error("文件{}不存在:", dir.getAbsolutePath());
return;
}
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
/* 递归 */
zipByType(files[i], out, basedir + dir.getName() + "/");
}
}
/**
* 压缩一个文件
* @param file 待压缩的文件
* @param out 压缩流
* @param basedir 压缩文件里面的相对路径
*/
private static void zipFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
log.error("文件{}不存在", file.getAbsolutePath());
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[8192];
while ((count = bis.read(data, 0, data.length)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
log.error("压缩文件异常:", e);
return;
}
}
// ------------------------------压缩文件end------------------------------------------
// ------------------------------解压缩文件begin--------------------------------------
/**
* 解压缩文件操作,解压到到当前目录下
*
* @param zipFile
* 被解压的压缩文件名(带路径)
*/
public static void unzip(String zipFileName) {
File zipFile = new File(zipFileName);
unzip(zipFile);
}
/**
* 解压缩文件操作,解压到到当前目录下
*
* @param zipFile
* 被解压的压缩文件
*/
public static void unzip(File zipFile) {
if (!zipFile.exists()) {
log.error("文件{}不存在", zipFile.getAbsolutePath());
}
String targetPath = zipFile.getParent() + "/";
unzip(zipFile, targetPath);
}
/**
* 解压缩文件操作
*
* @param srcPathName
* 被解压的压缩文件名(带路径)
* @param desPathName
* 解压后的目录
*/
public static void unzip(String zipFileName, String desPathName) {
File zipFile = new File(zipFileName);
unzip(zipFile, desPathName);
}
/**
* 解压缩文件操作
*
* @param zipFile
* 被解压的压缩文件
* @param targetPath
* 解压后的目录
*/
public static void unzip(File zipFile, String targetPath) {
if (!zipFile.exists()) {
log.error("文件{}不存在", zipFile.getAbsolutePath());
}
try {
File pathFile = new File(targetPath);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (targetPath + zipEntryName).replaceAll("\\*", "/");
// 判断路径是否存在,不存在则创建文件路径
if (outPath.indexOf('/') > 0) {
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if (!file.exists()) {
file.mkdirs();
}
}
// 判断文件全路径是否为文件夹,如果是上面已经创建,不需要解压
if (new File(outPath).isDirectory()) {
continue;
}
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
in.close();
out.close();
}
zip.close();
} catch (IOException e) {
log.error("解压缩文件异常:", e);
return;
}
}
// ------------------------------解压缩文件end----------------------------------------
}
相关文章推荐
- java对文件压缩与解压缩操作
- 【Java】IO操作之使用zip包压缩和解压缩文件
- Java操作zip压缩和解压缩文件工具类
- Java操作zip压缩和解压缩文件工具类
- Java操作zip压缩和解压缩文件工具类
- Java ZIP文件压缩与解压缩
- 多文件压缩与解压缩(JAVA)
- 用java流 压缩文件与解压缩文件代码
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- Java实现Zip压缩/解压缩目录中的所有文件
- java压缩与解压缩文件(利用apache的ant.jar) .
- Java文件压缩与解压缩(四)
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- Java文件压缩与解压缩(二)
- 【JAVA】压缩文件以及解压缩
- java编程笔记18 文件压缩与解压缩
- java 对多文件进行压缩与解压缩代码
- Linux(CentOS)目录操作命令、文件操作命令、压缩解压缩命令
- Java文件压缩与解压缩(三)