您的位置:首页 > 编程语言 > Java开发

在 Java 中解压 zip 文件

2015-08-26 18:18 459 查看
/** 解压 zip 文件。
* @param zipFilePath zip 文件路径
* @param unzipDirPath 解压目录
* */
public static void unZip(String zipFilePath, String unzipDirPath) {

int buffer = 2048;
int count = -1;

File dir = new File(unzipDirPath);
if (!dir.exists()) {
dir.mkdirs();
}

if (!unzipDirPath.endsWith("/")) {
unzipDirPath += "/";
}

try {
// java.io.FileInputStream
FileInputStream fis = new FileInputStream(zipFilePath);
// java.util.zip.ZipInputStream
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
// java.util.zip.ZipEntry
ZipEntry entry = null;

while ((entry = zis.getNextEntry()) != null) {
byte data[] = new byte[buffer];

String entryName = entry.getName().replace("\\", "/");

// 文件名以 / 结尾,这是一个目录,创建目录后直接跳过
if (entryName.endsWith("/")) {
new File(unzipDirPath + entryName).mkdirs();
continue;
}

// 文件名中包含目录,则先创建该目录
if (entryName.contains("/")) {
String _path = unzipDirPath + entryName.substring(0, entryName.lastIndexOf("/") + 1);
File _dir = new File(_path);
if (!dir.exists()) {
_dir.mkdirs();
}
}

String path = unzipDirPath + entryName;
File file = new File(path);
file.createNewFile();

// java.io.FileOutputStream
FileOutputStream fos = new FileOutputStream(file);
// java.io.BufferedOutputStream
BufferedOutputStream bos = new BufferedOutputStream(fos, buffer);

while((count = zis.read(data, 0, buffer)) != -1) {
bos.write(data, 0, count);
}

bos.flush();
bos.close();
}

zis.close();

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