//java处理zip文件 已解决中文问题
作者:huivip(孙来会)
测试环境:win2000+jdk1.4+jb2006
import java.io.*;
import java.util.Enumeration;
//import java.util.zip.*;
import org.apache.tools.zip.*;
public class Test {
//解压文件
public static void extZipFileList(String zipFileName, String extPlace) {
try {
ZipFile zipfile=new ZipFile(zipFileName);
InputStream in = null;
ZipEntry entry = null;
File files = new File(extPlace);
if (files.exists() == false) {
files.mkdirs();
}
String inpath = extPlace;
Enumeration ea=zipfile.getEntries();
while ( ea.hasMoreElements()) {
entry=(ZipEntry)ea.nextElement();
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File(extPlace + entryName);
file.mkdirs();
inpath += "/" + file.getName();
}
else {
File newfile=new File(extPlace+File.separator+entryName.substring(0,entryName.lastIndexOf("/")+1));
newfile.mkdirs();
newfile=new File(extPlace+File.separator+entryName);
newfile.createNewFile();
FileOutputStream os = new FileOutputStream(newfile);
in=zipfile.getInputStream(entry);
byte[] buf = new byte[1024];
int len;
while ( (len = in.read(buf)) > 0) {
os.write(buf, 0, len);
}
os.close();
in.close();
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
//压缩文件
public static String CreateZip(ArrayList files) throws IOException {
double k = Math.random();
String filename = Double.toString(k) + ".zip";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(filename));
ZipEntry ze = null;
byte[] buf = new byte[1024];
int readLen = 0;
for (int i = 0; i < files.size(); i++) {
File f = new File( (String) files.get(i));
//创建一个ZipEntry,并设置Name和其它的一些属性
//String fn=new String(((String)files.get(i)).getBytes("GBK"),"8859_1");
ze = new ZipEntry(f.getName());
ze.setSize(f.length());
ze.setTime(f.lastModified());
//将ZipEntry加到zos中,再写入实际的文件内容
zos.putNextEntry(ze);
InputStream is = new BufferedInputStream(new FileInputStream(f));
while ( (readLen = is.read(buf, 0, 1024)) != -1) {
zos.write(buf, 0, readLen);
}
is.close();
//System.out.println(" done...");
}
zos.close();
// 压缩后删除原文件
// for (int i = 0; i < files.size(); i++) {
// File f = new File( (String) files.get(i));
// if (f.exists()) {
// f.delete();
// }
// }
return filename;
}
public static String CreateZip(String[] files) throws IOException {
//List fileList = getSubFiles(new File(baseDir));
double k = Math.random();
String filename = Double.toString(k) + ".zip";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(filename));
ZipEntry ze = null;
byte[] buf = new byte[1024];
int readLen = 0;
for (int i = 0; i < files.length; i++) {
File f = new File( (String) files[i]);
//创建一个ZipEntry,并设置Name和其它的一些属性
ze = new ZipEntry(f.getName());
ze.setSize(f.length());
ze.setTime(f.lastModified());
//将ZipEntry加到zos中,再写入实际的文件内容
zos.putNextEntry(ze);
InputStream is = new BufferedInputStream(new FileInputStream(f));
while ( (readLen = is.read(buf, 0, 1024)) != -1) {
zos.write(buf, 0, readLen);
}
is.close();
//System.out.println(" done...");
}
zos.close();
// 压缩后删除原文件
// for (int i = 0; i < files.length; i++) {
// File f = new File( (String) files[i]);
// if (f.exists()) {
// f.delete();
// }
// }
return filename;
}
public static void main(String[] args) {
extZipFileList("/temp/x.zip", "/temp/50002/");
}
}