Java解压zip文件

package com.sunz.fileUpload;

import java.io.*;
import java.util.*;
import java.util.zip.*;
import sun.io.*;

public class Linzip {
   
    public static String make8859toGB(String str) {
        try {
            String str8859 = new String(str.getBytes("8859_1"), "GB2312");
            return str8859;
        } catch (UnsupportedEncodingException ioe) {
            return str;
        }
    }
   
    public static native int MessageBox(int hWnd, String lpText, String lpCaption, int uType);
   
    public String unZip(String filePath){
       
        String shpPath = "";
        File infile = new File(filePath);

        try {
            // 检查是否是ZIP文件
            ZipFile zip = new ZipFile(infile);
            zip.close();

            // 建立与目标文件的输入连接
            ZipInputStream in = new ZipInputStream(new FileInputStream(infile));
            ZipEntry file = in.getNextEntry();

            int i = infile.getAbsolutePath().lastIndexOf('.');
            String dirname = new String();
            if (i != -1){
                dirname = infile.getAbsolutePath().substring(0, i);
                System.out.println("dirname:"+dirname);
            }
            else{
                dirname = infile.getAbsolutePath();
                System.out.println("dirname:"+dirname);
            }
           
            File newdir = new File(dirname);
            newdir.mkdir();

            byte[] c = new byte[1024];
            int slen;

            while (file != null) {
                i = make8859toGB(file.getName()).replace('/', '//')
                        .lastIndexOf('//');
                if (i != -1) {
                    File dirs = new File(dirname
                            + File.separator
                            + make8859toGB(file.getName()).replace('/', '//')
                                    .substring(0, i));
                    dirs.mkdirs();
                    dirs = null;
                }

                System.out.print("Extract "
                        + make8859toGB(file.getName()).replace('/', '//')
                        + " ........ ");
               
                if (file.isDirectory()) {
                    File dirs = new File(make8859toGB(file.getName()).replace(
                            '/', '//'));
                    dirs.mkdir();
                    dirs = null;
                } else {
                    String theFilePath = dirname
                                        + File.separator
                                        + make8859toGB(file.getName()).replace('/', '//');
                    if(theFilePath.substring(theFilePath.lastIndexOf("."), theFilePath.length()).equals(".shp")){
                        shpPath = theFilePath;
                        System.out.println(theFilePath);
                    }
                    FileOutputStream out = new FileOutputStream(theFilePath);
                    while ((slen = in.read(c, 0, c.length)) != -1)
                        out.write(c, 0, slen);
                    out.close();
                }
                System.out.print("O.K./n");
                file = in.getNextEntry();
            }
            in.close();
        } catch (ZipException zipe) {
            MessageBox(0, infile.getName() + "不是一个ZIP文件!", "文件格式错误", 16);
        } catch (IOException ioe) {
            MessageBox(0, "读取" + filePath + "时错误!", "文件读取错误", 16);
        } catch (Exception i) {
            System.out.println("over"+i.getMessage());
        }
       
        return shpPath;
    }

    public static void main(String[] args) {
        Linzip linzip = new Linzip();
        String path = linzip.unZip("d:/ssss.zip");
       
        System.out.println("here:"+path);
    }

   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值