这是一个演示如何读取和解压 zip 压缩包的例子。zip 压缩格式 是一个开放的标准。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
* ZIP 压缩包读取和解压示例
*
* @author yiding.he
*/
public class ZipFileDemo {
public static void main(String[] args) throws IOException {
ZipFile zip = new ZipFile("junit.jar");
Enumeration<? extends ZipEntry> entries = zip.entries();
// 遍历压缩包
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
if (!entry.isDirectory()) {
// 输出被压缩的文件信息
System.out.print(entry.getName() +
" (compressed from " + entry.getSize() +
" to " + entry.getCompressedSize() + ")...");
// 解压缩文件
InputStream is = zip.getInputStream(entry);
FileOutputStream fos = new FileOutputStream(getFile("junit", entry.getName()));
copyStream(is, fos);
System.out.println("decompressed.");
}
}
}
private static File getFile(String root, String path) {
File file = new File(root + "/" + path);
if (!file.exists()) {
file.getParentFile().mkdirs();
}
return file;
}
private static void copyStream(InputStream is, OutputStream os) {
try {
byte[] buffer = new byte[10240];
int size = 0;
while ((size = is.read(buffer)) != -1) {
os.write(buffer, 0, size);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException ex) {
// nothing to do
}
try {
os.close();
} catch (IOException ex) {
// nothing to do
}
}
}
}