我是代码派
public class ZipUtils {
/**
* 解压文件
* @param zipPath
* @param toPath
* @throws IOException
*/
public static void unCompress(String zipPath, String toPath) throws IOException {
if(!toPath.endsWith("\\"))toPath += "\\";
File destFile = new File(toPath);
if(!destFile.exists())destFile.mkdirs();
File zipfile = new File(zipPath);
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipfile));
ZipEntry entry = null;
while ((entry = zis.getNextEntry()) != null) {
if (entry.isDirectory()) {
File file = new File(toPath + entry.getName() + "\\");
file.mkdirs();
} else {
File file = new File(toPath + entry.getName());
if(!file.getParentFile().exists())file.getParentFile().mkdirs();
FileOutputStream fos = new FileOutputStream(file);
byte buf[] = new byte[1024];
int len = -1;
while ((len = zis.read(buf, 0, 1024)) != -1) {
fos.write(buf, 0, len);
}
fos.close();
}
}
zis.close();
}
public static byte[] getData(String zipPath, String path) throws IOException{
File zipfile = new File(zipPath);
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipfile));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipEntry entry = null;
while ((entry = zis.getNextEntry()) != null) {
if(entry.getName().equals(path)){
byte buf[] = new byte[1024];
int len = -1;
while ((len = zis.read(buf, 0, 1024)) != -1) {
baos.write(buf, 0, len);
}
break;
}
}
baos.close();
zis.close();
return baos.toByteArray();
}
/**
* 压缩单个文件
* @param file
*/
public static void compress(File file) {
try {
String fileName = file.getName();
if(fileName.indexOf(".") != -1)
fileName = fileName.substring(0, fileName.indexOf("."));
FileOutputStream f = new FileOutputStream(file.getParent() + "/" + fileName+ ".zip");
CheckedOutputStream cs = new CheckedOutputStream(f, new Adler32());
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cs));
InputStream in = new FileInputStream(file);
out.putNextEntry(new ZipEntry(file.getName()));
int len = -1;
byte buf[] = new byte[1024];
while((len = in.read(buf, 0, 1024)) != -1)
out.write(buf, 0, len);
out.closeEntry();
in.close();
out.close();
} catch (Exception e) {
System.err.println(e);
}
}
/**
* 压缩文件夹
* @param file
* @throws IOException
*/
public static void compressDir(File file) throws IOException{
FileOutputStream f = new FileOutputStream(file.getParent() + file.getName() + ".zip");
CheckedOutputStream cs = new CheckedOutputStream(f, new Adler32());
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cs));
compressDir(file, out, file.getAbsolutePath());
out.flush();
out.close();
}
/**
* 压缩文件夹递归调用方法
* @param file
* @param out
* @throws IOException
*/
private static void compressDir(File srcFile, ZipOutputStream out, String destPath) throws IOException{
if(srcFile.isDirectory()){
File subfile[] = srcFile.listFiles();
for(int i=0; i< subfile.length; i++){
compressDir(subfile[i], out, destPath);
}
}else{
InputStream in = new FileInputStream(srcFile);
String name = srcFile.getAbsolutePath().replace(destPath, "");
if(name.startsWith("\\"))name = name.substring(1);
ZipEntry entry = new ZipEntry(name);
entry.setSize(srcFile.length());
entry.setTime(srcFile.lastModified());
out.putNextEntry(entry);
int len = -1;
byte buf[] = new byte[1024];
while((len = in.read(buf, 0, 1024)) != -1)
out.write(buf, 0, len);
out.closeEntry();
in.close();
}
}
public static void main(String[] args) throws Exception {
ZipUtils.compress(new File("d:/aa/a01.jpg"));
// try {
// byte buf[] = ZipDemo.getData("d:/aa.zip", "aa.txt");
// System.out.println(buf.length);
// ZipDemo.unCompress("d:/aa.zip", "d:/kk/");
// } catch (IOException e) {
// e.printStackTrace();
// }
}