import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipInputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* 文件解压缩,需要依赖ant.jar
*
*/
public class Zip{
private ZipInputStream zipIn; //解压Zip
private ZipOutputStream zipOut; //压缩Zip
private java.util.zip.ZipEntry zipEntry;
private int bufSize; //size of bytes
private byte[] buf;
private int readedBytes;
/**
* 默认buf:1024
*/
public Zip(){
this(1024);
}
/**
* 带缓冲大小参数的构造方法
* @param bufSize
*/
public Zip(int bufSize){
this.bufSize = bufSize;
this.buf = new byte[this.bufSize];
}
/**
* 压缩文件或文件夹
* @param zipDirectory 文件或文件夹的路径
* @param zipFileName 压缩后的文件名,如果为null,
则文件是文件的名称+.zip;文件夹是文件夹的名+.zip
*/
public void doZip(String zipDirectory,String zipFileName){
//zipDirectoryPath:需要压缩的文件夹名
File zipDir = new File(zipDirectory);
if(zipFileName==null)
zipFileName = zipDir.getName() + ".zip";
if(zipFileName.indexOf(".zip")==-1)
zipFileName+=".zip";
String zipPath="";
try{
if(zipDir.getParentFile()!=null){
zipPath=zipDir.getParentFile().getCanonicalPath()+File.separator;
}
File zipOutFile=new File(zipPath+zipFileName);
zipOut = new ZipOutputStream(new BufferedOutputStream(new
FileOutputStream(zipOutFile)));
zipOut.setEncoding("gbk");
handleDir(zipDir , zipOut,zipPath);
zipOut.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
private void handleDir(File dir , ZipOutputStream zipOut,String basePath)
throws IOException{
FileInputStream fileIn;
if(dir.isDirectory()){
File[] files;
files = dir.listFiles();
if(files.length == 0){//如果目录为空,则单独创建之.
//ZipEntry的isDirectory()方法中,目录以"/"结尾.
zipOut.putNextEntry(new ZipEntry(dir.getCanonicalPath().
substring(basePath.length()) + "/"));
zipOut.closeEntry();
}else{//如果目录不为空,则分别处理目录和文件.
for(File fileName : files){
handleDir(fileName,zipOut,basePath);
}
}
}else{
fileIn = new FileInputStream(dir);
zipOut.putNextEntry(new ZipEntry(dir.getCanonicalPath().
substring(basePath.length())));
while((readedBytes = fileIn.read(buf))>0){
zipOut.write(buf , 0 , readedBytes);
}
fileIn.close();
zipOut.closeEntry();
}
}
/**
* 解压zip包
* @param unZipfileName 需要解压的zip文件路径名
*/
public void unZip(String unZipfileName){
FileOutputStream fileOut;
File file;
try {
String basePath=new File(unZipfileName).getParentFile().getCanonicalPath();
zipIn = new ZipInputStream(new BufferedInputStream(
new FileInputStream(unZipfileName)));
while ((zipEntry =zipIn.getNextEntry()) != null) {
file = new File(basePath+File.separator+zipEntry.getName());
if (zipEntry.isDirectory()) {
file.mkdirs();
} else {
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
fileOut = new FileOutputStream(file);
while ((readedBytes = zipIn.read(buf)) > 0) {
fileOut.write(buf, 0, readedBytes);
}
fileOut.close();
}
zipIn.closeEntry();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
/**
* 设置缓冲大小
* @param bufSize
*/
public void setBufSize(int bufSize){
this.bufSize = bufSize;
}
public static void main(String[] args)throws Exception{
Zip zip = new Zip();
String file1 = "C:\\ggg";
zip.doZip(file1,null);
}
}
Java实现文件解压缩
最新推荐文章于 2023-07-01 07:43:25 发布