`
lolocomee
  • 浏览: 15997 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

ant包加压解压文件

阅读更多

org.apache.tools.zip这个其实就在sdk你面找到:C:\Sun\SDK\lib\ant\lib里面的ant.jar。

应用里面对文件,文件夹加压解压,用gb2312编码,解决文件名称乱码问题。

 

先来看看这个类:

package hellowordapp;

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
/**
 *
 * @author gdcic-zhang
 */
public class Zip {


    private static Zip instance = new Zip();

    public Zip() {
    }

 

    public static Zip getInstance() {
        return instance;
    }

 

    public synchronized void zip(String inputFilename, String zipFilename)
            throws IOException {
         System.out.println(inputFilename);
        zip(new File(inputFilename), zipFilename);
    }

 

    public synchronized void zip(File inputFile, String zipFilename) throws IOException {
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
                new String(zipFilename.getBytes("gb2312"))));
        out.setEncoding("gb2312");
        try {
            zip(inputFile, out, "");
        } catch (IOException e) {
            throw e;
        } finally {
            out.close();
        }
    }

 

    private synchronized void zip(File inputFile, ZipOutputStream out, String base)
            throws IOException {
        if (inputFile.isDirectory()) {
            File[] inputFiles = inputFile.listFiles();
            out.putNextEntry(new ZipEntry(base + "/"));
            base = base.length() == 0 ? "" : base + "/";
            for (int i = 0; i < inputFiles.length; i++) {
                zip(inputFiles[i], out, base + inputFiles[i].getName());
            }

        } else {
            if (base.length() > 0) {
                out.putNextEntry(new ZipEntry(base));
            } else {
                out.putNextEntry(new ZipEntry(inputFile.getName()));
            }

            FileInputStream in = new FileInputStream(inputFile);
            try {
                int c;
                byte[] by = new byte[BUFFEREDSIZE];
                while ((c = in.read(by)) != -1) {
                    out.write(by, 0, c);
                }
            } catch (IOException e) {
                throw e;
            } finally {
                in.close();
            }
        }
    }

 

//解压

    public synchronized void unzip(String zipFilename, String outputDirectory)
            throws IOException {
        File outFile = new File(outputDirectory);
        if (!outFile.exists()) {
            outFile.mkdirs();
        }

        ZipFile zipFile = new ZipFile(zipFilename);
        Enumeration en = zipFile.getEntries();
        ZipEntry zipEntry = null;
        while (en.hasMoreElements()) {
            zipEntry = (ZipEntry) en.nextElement();
            if (zipEntry.isDirectory()) {
                // mkdir directory
                String dirName = zipEntry.getName();
                dirName = dirName.substring(0, dirName.length() - 1);

                File f = new File(outFile.getPath() + File.separator + dirName);
                f.mkdirs();

            } else {
                // unzip file
                File f = new File(outFile.getPath() + File.separator
                        + zipEntry.getName());
                f.createNewFile();
                InputStream in = zipFile.getInputStream(zipEntry);
                FileOutputStream out = new FileOutputStream(f);
                try {
                    int c;
                    byte[] by = new byte[BUFFEREDSIZE];
                    //while ((c = in.read(by)) != -1) {
                    //    out.write(by, 0, c);
                   // }
                    while ((c = in.read(by))>0){
                        out.write(by, 0 , c);
                    }
                    // out.flush();
                } catch (IOException e) {
                    throw e;
                } finally {
                    out.close();
                    in.close();
                }
            }
        }
    }

    private static final int BUFFEREDSIZE = 1024;  
}

 

 

这里是测试:(可以将文件变成文件夹,就加压文件夹了)

       zip bean = new Zip();
       try {
              bean.zip("e:/见天rar.txt", "e:/test.zip");
              bean.unzip("e:/test.zip", "e:/out/temp");
        } catch (IOException e) {
              e.printStackTrace();
        }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics