首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Java兑现文件解压缩

2012-07-05 
Java实现文件解压缩import java.io.BufferedInputStreamimport java.io.BufferedOutputStreamimport jav

Java实现文件解压缩

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);    }}

热点排行