用apache zip包解压缩zip文件
前些天做了一个信息基础考试系统,其中有一步要求客户端从服务器端抽取试题,下载本地,然后用程序解压缩,解压缩完成后,删除zip文件。但是解压后zip文件删除不掉,总是有程序占用,后来经过调试发现几个流对象没有关闭。下面给出正确的程序:
// zipFileName为要解压缩的zip为文件名,例:c:\\filename.zip
// outputDirectoty为解压缩后文件名,例:c:\\filename
public void unZip(String zipFileName, String outputDirectory)
throws Exception {
InputStream in = null;
FileOutputStream out = null;
try {
zipFile = new ZipFile(zipFileName);
java.util.Enumeration e = zipFile.getEntries();
// org.apache.tools.zip.ZipEntry zipEntry = null;
createDirectory(outputDirectory, "");
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
System.out.println("unziping " + zipEntry.getName());
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0, name.length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
System.out.println("创建目录:" + outputDirectory
+ File.separator + name);
} else {
String fileName = zipEntry.getName();
fileName = fileName.replace('\\', '/');
// System.out.println("测试文件1:" +fileName);
if (fileName.indexOf("/") != -1) {
createDirectory(outputDirectory, fileName.substring(0,
fileName.lastIndexOf("/")));
fileName = fileName.substring(
fileName.lastIndexOf("/") + 1, fileName
.length());
}
try {
f = new File(outputDirectory + File.separator
+ zipEntry.getName());
in = zipFile.getInputStream(zipEntry);
out = new FileOutputStream(f);
byte[] by = new byte;
int c;
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
out.flush();
} catch (Exception ee) {
} finally {
if (in != null) {
in.close(); //解压完成后注意关闭输入流对象
}
if (out != null) {
out.close(); //解压完成后注意关闭输出流对象
}
}
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
zipFile.close(); //解压完成后注意关闭apache自带zip流对象
}
}
页:
[1]