您的位置:首页 > 编程语言 > Java开发

java  文件压缩

2013-10-30 11:51 495 查看
import
java.io.*;

import org.apache.tools.zip.*;

import java.util.Enumeration;

public class
AntZip{

    private
ZipFile       
zipFile;

    private
ZipOutputStream
zipOut;   
//压缩Zip

    private
ZipEntry       
zipEntry;

    private
static
int     
bufSize;   
//size of bytes

    private
byte[]         
buf;

    private
int           
readedBytes;

   

    public
AntZip(){

       
this(512);

    }

   
public AntZip(int bufSize){

       
this.bufSize = bufSize;

       
this.buf = new byte[this.bufSize];

    }

   

   
//压缩文件夹内的文件

    public void
doZip(String zipDirectory){//zipDirectoryPath:需要压缩的文件夹名

       
File file;

       
File zipDir;

       
zipDir = new File(zipDirectory);

       
String zipFileName = zipDir.getName() +
".zip";//压缩后生成的zip文件名

       
try{

           
this.zipOut = new ZipOutputStream(new BufferedOutputStream(new
FileOutputStream(zipFileName)));

           
handleDir(zipDir , this.zipOut);

           
this.zipOut.close();

       
}catch(IOException ioe){

           
ioe.printStackTrace();

       
}

    }

   
//由doZip调用,递归完成目录文件读取

    private void
handleDir(File dir , ZipOutputStream zipOut)throws
IOException{

       
FileInputStream fileIn;

       
File[] files;

       
files = dir.listFiles();

   

       
if(files.length == 0){//如果目录为空,则单独创建之.

           
//ZipEntry的isDirectory()方法中,目录以"/"结尾.

           
this.zipOut.putNextEntry(new ZipEntry(dir.toString() + "/"));

           
this.zipOut.closeEntry();

       
}

       
else{//如果目录不为空,则分别处理目录和文件.

           
for(File fileName : files){

               
//System.out.println(fileName);

               
if(fileName.isDirectory()){

                   
handleDir(fileName , this.zipOut);

               
}

               
else{

                   
fileIn = new FileInputStream(fileName);

                   
this.zipOut.putNextEntry(new
ZipEntry(fileName.toString()));

                   
while((this.readedBytes =
fileIn.read(this.buf))>0){

                       
this.zipOut.write(this.buf , 0 , this.readedBytes);

                   
}

                   
this.zipOut.closeEntry();

               
}

           
}

       
}

    }

   
//解压指定zip文件

    public void
unZip(String unZipfileName){//unZipfileName需要解压的zip文件名

       
FileOutputStream fileOut;

       
File file;

       
InputStream inputStream;

       
try{

           
this.zipFile = new ZipFile(unZipfileName);

           
for(Enumeration entries = this.zipFile.getEntries();
entries.hasMoreElements();){

               
ZipEntry entry = (ZipEntry)entries.nextElement();

               
file = new File(entry.getName());

               
if(entry.isDirectory()){

                   
file.mkdirs();

               
}

               
else{

                   
//如果指定文件的目录不存在,则创建之.

                   
File parent = file.getParentFile();

                   
if(!parent.exists()){

                       
parent.mkdirs();

                   
}

                   
inputStream = zipFile.getInputStream(entry);

                   
fileOut = new FileOutputStream(file);

                   
while(( this.readedBytes = inputStream.read(this.buf) )
> 0){

                       
fileOut.write(this.buf , 0 , this.readedBytes );

                   
}

                   
fileOut.close();

                   
inputStream.close();

               
}   

           
}

           
this.zipFile.close();

       
}catch(IOException ioe){

           
ioe.printStackTrace();

       
}

    }

   
//设置缓冲区大小

    public void
setBufSize(int bufSize){

       
this.bufSize = bufSize;

    }

   
//测试AntZip类

    public
static void main(String[] args)throws Exception{

       
if(args.length==2){

           
String name = args[1];

           
AntZip zip = new AntZip();

           
if(args[0].equals("-zip"))

               
zip.doZip(name);

           
else if(args[0].equals("-unzip"))

               
zip.unZip(name);

       
}

       
else{

           
System.out.println("Usage:");

           
System.out.println("压缩:java AntZip -zip directoryName");

           
System.out.println("解压:java AntZip -unzip fileName.zip");

           
throw new Exception("Arguments error!");

       
}

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: