使用Java解压ZIP文件
2008-06-04 17:50
351 查看
使用java来解压zip文件,org.apache.tools.zip可以解决压缩文件标题是中文的问题,使用多线程,提高效率
package com.proquest.magnolia.unzip;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipException;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
/* this class is for unpack the files in the zip file
* @author: zzy
* @time: June 3th,2008
*/
public class ZipUtils {
private static final List<ZipEntry> entries = new ArrayList<ZipEntry>();
/*
* the default constructor
*/
public ZipUtils() {
}
public static void unZipDirectory(String zipFileDirectory,
String outputDirectory) throws ZipException, IOException {
File file = new File(zipFileDirectory);
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].getName().endsWith(".zip")) {
unzip(zipFileDirectory + File.separator + files[i].getName(),
outputDirectory);
}
}
}
/*
* unzip the file to destination directory @param fileURI hold the file
* location @param outputDirectory hold the output directory of unpacked
* files @throws ZipException,IOException
*/
public static void unzip(String fileURI, String outputDirectory)
throws ZipException, IOException {
File file = new File(fileURI);
unzip(file, outputDirectory);
}
/*
* unzip the file to destination directory @param file hold the zip file
* @param outputDirectory hold the output directory of unpacked files
* @throws ZipException,IOException
*/
public static void unzip(File file, String outputDirectory)
throws ZipException, IOException {
ZipFile zipFile = new ZipFile(file);
Enumeration<ZipEntry> enu = (Enumeration<ZipEntry>) zipFile.getEntries();
while (enu.hasMoreElements()) {
ZipEntry entry = (ZipEntry) enu.nextElement();
if (entry.isDirectory()) {
String fileName = entry.getName().substring(0,
entry.getName().length() - 1);
String directoryPath = outputDirectory + File.separator
+ fileName;
File directory = new File(directoryPath);
directory.mkdir();
}
entries.add(entry);
}
unzip(zipFile, entries, outputDirectory);
}
public static void unzip(ZipFile zipFile, List<ZipEntry> entries,
String outputDirectory) throws IOException {
Iterator<ZipEntry> it = entries.iterator();
while (it.hasNext()) {
ZipEntry zipEntry = (ZipEntry) it.next();
MultiThreadEntry mte = new MultiThreadEntry(zipFile, zipEntry,
outputDirectory);
Thread thread = new Thread(mte);
thread.start();
}
}
/*
* Use MultiThread to read each entry
*/
private static class MultiThreadEntry implements Runnable {
public static final int BUFFER_SIZE = 2048;
private BufferedInputStream bis;
private ZipEntry zipEntry;
private String outputDirectory;
public MultiThreadEntry(ZipFile zipFile, ZipEntry zipEntry,
String outputDirectory) throws IOException {
this.zipEntry = zipEntry;
this.outputDirectory = outputDirectory;
bis = new BufferedInputStream(zipFile.getInputStream(zipEntry));
}
public void run() {
try {
unzipFiles(zipEntry, outputDirectory);
} catch (IOException e) {
try {
bis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void unzipFiles(ZipEntry zipEntry, String outputDirectory)
throws IOException {
byte[] data = new byte[BUFFER_SIZE];
String entryName = zipEntry.getName();
entryName = new String(entryName.getBytes("GBK"));
FileOutputStream fos = new FileOutputStream(outputDirectory
+ File.separator + entryName);
if (zipEntry.isDirectory()) {
} else {
BufferedOutputStream bos = new BufferedOutputStream(fos,
BUFFER_SIZE);
int count = 0;
while ((count = bis.read(data, 0, BUFFER_SIZE)) != -1) {
bos.write(data, 0, count);
}
bos.flush();
bos.close();
}
}
}
public static void main(String args[]) throws ZipException, IOException {
ZipUtils.unzip("C://test//test.zip", "C://test");
}
}
package com.proquest.magnolia.unzip;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipException;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
/* this class is for unpack the files in the zip file
* @author: zzy
* @time: June 3th,2008
*/
public class ZipUtils {
private static final List<ZipEntry> entries = new ArrayList<ZipEntry>();
/*
* the default constructor
*/
public ZipUtils() {
}
public static void unZipDirectory(String zipFileDirectory,
String outputDirectory) throws ZipException, IOException {
File file = new File(zipFileDirectory);
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].getName().endsWith(".zip")) {
unzip(zipFileDirectory + File.separator + files[i].getName(),
outputDirectory);
}
}
}
/*
* unzip the file to destination directory @param fileURI hold the file
* location @param outputDirectory hold the output directory of unpacked
* files @throws ZipException,IOException
*/
public static void unzip(String fileURI, String outputDirectory)
throws ZipException, IOException {
File file = new File(fileURI);
unzip(file, outputDirectory);
}
/*
* unzip the file to destination directory @param file hold the zip file
* @param outputDirectory hold the output directory of unpacked files
* @throws ZipException,IOException
*/
public static void unzip(File file, String outputDirectory)
throws ZipException, IOException {
ZipFile zipFile = new ZipFile(file);
Enumeration<ZipEntry> enu = (Enumeration<ZipEntry>) zipFile.getEntries();
while (enu.hasMoreElements()) {
ZipEntry entry = (ZipEntry) enu.nextElement();
if (entry.isDirectory()) {
String fileName = entry.getName().substring(0,
entry.getName().length() - 1);
String directoryPath = outputDirectory + File.separator
+ fileName;
File directory = new File(directoryPath);
directory.mkdir();
}
entries.add(entry);
}
unzip(zipFile, entries, outputDirectory);
}
public static void unzip(ZipFile zipFile, List<ZipEntry> entries,
String outputDirectory) throws IOException {
Iterator<ZipEntry> it = entries.iterator();
while (it.hasNext()) {
ZipEntry zipEntry = (ZipEntry) it.next();
MultiThreadEntry mte = new MultiThreadEntry(zipFile, zipEntry,
outputDirectory);
Thread thread = new Thread(mte);
thread.start();
}
}
/*
* Use MultiThread to read each entry
*/
private static class MultiThreadEntry implements Runnable {
public static final int BUFFER_SIZE = 2048;
private BufferedInputStream bis;
private ZipEntry zipEntry;
private String outputDirectory;
public MultiThreadEntry(ZipFile zipFile, ZipEntry zipEntry,
String outputDirectory) throws IOException {
this.zipEntry = zipEntry;
this.outputDirectory = outputDirectory;
bis = new BufferedInputStream(zipFile.getInputStream(zipEntry));
}
public void run() {
try {
unzipFiles(zipEntry, outputDirectory);
} catch (IOException e) {
try {
bis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void unzipFiles(ZipEntry zipEntry, String outputDirectory)
throws IOException {
byte[] data = new byte[BUFFER_SIZE];
String entryName = zipEntry.getName();
entryName = new String(entryName.getBytes("GBK"));
FileOutputStream fos = new FileOutputStream(outputDirectory
+ File.separator + entryName);
if (zipEntry.isDirectory()) {
} else {
BufferedOutputStream bos = new BufferedOutputStream(fos,
BUFFER_SIZE);
int count = 0;
while ((count = bis.read(data, 0, BUFFER_SIZE)) != -1) {
bos.write(data, 0, count);
}
bos.flush();
bos.close();
}
}
}
public static void main(String args[]) throws ZipException, IOException {
ZipUtils.unzip("C://test//test.zip", "C://test");
}
}
相关文章推荐
- 使用java解压或者压缩zip文件
- 使用java实现zip文件的解压
- java 压缩解压zip文件--使用ant支持中文
- Java解压和压缩带密码的zip文件(转…
- java解压zip文件,处理文件名不能为中文
- java I/O:解压ZIP文件并保存其目录结构
- 使用java基础类实现zip压缩和zip解压工具类分享
- java解压zip文件的代码
- ZIP文件解压(java)
- 使用Objective-Zip解压Zip文件
- 使用Java 导入Zip文件遇到中文命名乱码问题
- java应用压缩、解压zip文件
- Java 压缩,解压zip文件(支持中文)
- 使用javatar解压tar包等
- java-在Java中操作Zip文件,压缩/解压
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java 解压zip文件
- Zlib.net 解压压缩 数据流 对应java 使用
- Java实现zip文件解压[到指定目录]
- Java解压zip文件