java压缩—-解压(亲测)
package com.CloudDisk.Extend;
import java.io.File;
import java.io.FileInputStream;
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.ZipOutputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
public class ZipOutPutStreamExtend {
public static void ZipFiles(File zip,String path,File... srcFiles) throws IOException{
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zip));
ZipFiles(out,path,srcFiles);
out.close();
}
public static void ZipFiles(ZipOutputStream out,String path,File... srcFiles){
path = path.replaceAll("\\*", "/");
if(!path.endsWith("/")){
path+="/";
}
byte[] buf = new byte[1024];
try {
for(int i=0;i<srcFiles.length;i++){
if(srcFiles[i].isDirectory()){
File[] files = srcFiles[i].listFiles();
String srcPath = srcFiles[i].getName();
srcPath = srcPath.replaceAll("\\*", "/");
if(!srcPath.endsWith("/")){
srcPath+="/";
}
out.putNextEntry(new ZipEntry(path+srcPath));
ZipFiles(out,path+srcPath,files);
}
else{
FileInputStream in = new FileInputStream(srcFiles[i]);
System.out.println(path + srcFiles[i].getName());
out.putNextEntry(new ZipEntry(path + srcFiles[i].getName()));
int len;
while((len=in.read(buf))>0){
out.write(buf,0,len);
}
out.closeEntry();
in.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void unZipFiles(String zipPath,String descDir)throws IOException{
unZipFiles(new File(zipPath), descDir);
}
@SuppressWarnings("rawtypes")
public static void unZipFiles(File zipFile,String descDir)throws IOException{
File pathFile = new File(descDir);
if(!pathFile.exists()){
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){
ZipEntry entry = (ZipEntry)entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream((ZipArchiveEntry) entry);
String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if(!file.exists()){
file.mkdirs();
}
if(new File(outPath).isDirectory()){
continue;
}
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while((len=in.read(buf1))>0){
out.write(buf1,0,len);
}
in.close();
out.close();
}
}
}
public InputStream getInputStream() throws IOException {
File zip = new File(getFilepath() + "/下载/Minecraft云盘网.zip");
if (filesname.length == 1) {
if (filesname[0].indexOf(".") != -1) {
fileslastname = filesname[0];
return new BufferedInputStream(new FileInputStream(
getFilepath() + "/" + fileName + "/" + filesname[0]));
} else {
File f = new File(getFilepath() + "/" + fileName + "/"
+ filesname[0]);
ZipOutPutStreamExtend.ZipFiles(zip, filesname[0], f);
}
} else {
File[] files = new File[filesname.length];
for (int i = 0; i < filesname.length; i++) {
files[i] = new File(getFilepath() + "/" + fileName + "/"
+ filesname[i]);
}
String title = files[0].getName();
ZipOutPutStreamExtend.ZipFiles(zip, title + "等文件", files);
}
fileslastname = "Minecraft云盘网 .zip";
fileslastname = new String(fileslastname.getBytes("GBK"), "ISO-8859-1");
return new BufferedInputStream(new FileInputStream(getFilepath()
+ "/下载/Minecraft云盘网.zip"));
}