java解压多目录Zip文件(解决中文乱码问题)--转载

原文地址:http://zhangyongbo.iteye.com/blog/1749439

import java.io.BufferedOutputStream;
import java.io.File;
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;
/**
 *  解压Zip文件工具类
 * @author zhangyongbo
 *
 */
public class ZipUtil {

    private static final int buffer = 2048;

      public static void main(String[] args)
        {
            unZip("E:\\java\\Android\\aaa.zip");
        }
    /**
     * 解压Zip文件
     * @param path 文件目录
     */
    public static void unZip(String path)
        {
         int count = -1;
         String savepath = "";

         File file = null;
         InputStream is = null;
         FileOutputStream fos = null;
         BufferedOutputStream bos = null;

         savepath = path.substring(0, path.lastIndexOf(".")) + File.separator; //保存解压文件目录
         new File(savepath).mkdir(); //创建保存目录
         ZipFile zipFile = null;
         try
         {
              zipFile = new ZipFile(path,"gbk"); //解决中文乱码问题
             Enumeration<?> entries = zipFile.getEntries();

             while(entries.hasMoreElements())
             {
                 byte buf[] = new byte[buffer];

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

                 String filename = entry.getName();
                 boolean ismkdir = false;
                 if(filename.lastIndexOf("/") != -1){ //检查此文件是否带有文件夹
                     ismkdir = true;
                 }
                 filename = savepath + filename;

                 if(entry.isDirectory()){ //如果是文件夹先创建
                     file = new File(filename);
                     file.mkdirs();
                      continue;
                 }
                 file = new File(filename);
                 if(!file.exists()){ //如果是目录先创建
                     if(ismkdir){
                     new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
                     }
                 }
                 file.createNewFile(); //创建文件

                 is = zipFile.getInputStream(entry);
                 fos = new FileOutputStream(file);
                 bos = new BufferedOutputStream(fos, buffer);

                 while((count = is.read(buf)) > -1)
                 {
                     bos.write(buf, 0, count);
                 }
                 bos.flush();
                 bos.close();
                 fos.close();

                 is.close();
             }

             zipFile.close();

         }catch(IOException ioe){
             ioe.printStackTrace();
         }finally{
                try{
                if(bos != null){
                    bos.close();
                }
                if(fos != null) {
                    fos.close();
                }
                if(is != null){
                    is.close();
                }
                if(zipFile != null){
                    zipFile.close();
                }
                }catch(Exception e) {
                    e.printStackTrace();
                }
            }
        }
}

指定目录重新的方法如下:

    /**
     * 解压Zip文件
     * @param path 文件目录
     */
    public static void unZipNew(String path,String savepath)
        {
         int count = -1;

         File file = null;
         InputStream is = null;
         FileOutputStream fos = null;
         BufferedOutputStream bos = null;

         ZipFile zipFile = null;
         try
         {
              zipFile = new ZipFile(path,"gbk"); //解决中文乱码问题
             Enumeration<?> entries = zipFile.getEntries();

             while(entries.hasMoreElements())
             {
                 byte buf[] = new byte[buffer];

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

                 String filename = entry.getName();
                 boolean ismkdir = false;
                 if(filename.lastIndexOf("/") != -1){ //检查此文件是否带有文件夹
                     ismkdir = true;
                 }
                 filename = savepath + filename;

                 if(entry.isDirectory()){ //如果是文件夹先创建
                     file = new File(filename);
                     file.mkdirs();
                      continue;
                 }
                 file = new File(filename);
                 if(!file.exists()){ //如果是目录先创建
                     if(ismkdir){
                     new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
                     }
                 }
                 file.createNewFile(); //创建文件

                 is = zipFile.getInputStream(entry);
                 fos = new FileOutputStream(file);
                 bos = new BufferedOutputStream(fos, buffer);

                 while((count = is.read(buf)) > -1)
                 {
                     bos.write(buf, 0, count);
                 }
                 bos.flush();
                 bos.close();
                 fos.close();

                 is.close();
             }

             zipFile.close();

         }catch(IOException ioe){
             ioe.printStackTrace();
         }finally{
                try{
                if(bos != null){
                    bos.close();
                }
                if(fos != null) {
                    fos.close();
                }
                if(is != null){
                    is.close();
                }
                if(zipFile != null){
                    zipFile.close();
                }
                }catch(Exception e) {
                    e.printStackTrace();
                }
            }
        }
时间: 2024-10-01 04:40:04

java解压多目录Zip文件(解决中文乱码问题)--转载的相关文章

C#压缩或解压(rar和zip文件)

/// <summary> /// 解压RAR和ZIP文件(需存在Winrar.exe(只要自己电脑上可以解压或压缩文件就存在Winrar.exe)) /// </summary> /// <param name="UnPath">解压后文件保存目录</param> /// <param name="rarPathName">待解压文件存放绝对路径(包括文件名称)</param> /// <

nginx开启目录浏览,解决中文乱码问题

nginx开启目录浏览,解决中文乱码问题 方法如下: server { listen 80; #listen [::]:80; server_name gongzi.liwenhui.xin gz.liwenhui.xin; index index.html index.htm index.php default.html default.htm default.php; root /www/gongzi.liwenhui.xin/; include other.conf; #error_pag

java压缩解压zip文件,中文乱码还需要ant.jar包

va] view plaincopyprint? package cn.cn; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; i

Java解压上传zip或rar文件,并解压遍历文件中的html的路径

1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute(Constant.USER_SESSION_KEY); String realName = user.getRealName(); System.out.println("--------获取登录用户信

python-----自动解压并删除zip文件

如何自动解压并删除zip? 如何解压  →  使用内置模块来实现(shutil.unpack_archive) 如何删除zip  →  使用内置模块os来实现(os.remove) 如何监测zip的出现  →  如何判断某文件是zip(s.split('.'[-1]) /  如何让函数每一秒都执行(while True) 以下代码素材自取:链接:https://pan.baidu.com/s/1t6i5W0jATSdze3sPAe4sNg  提取码:0npb import os import s

在Ubuntu系统中解压rar和zip文件的方法

大家在以前的windows系统中会存有很多rar和zip格式的压缩文件,Ubuntu系统默认情况下对这些文件的支持不是很好,如果直接用"归档管理器"打开会提示错误,因此今天跟大家分享一下如何在Ubuntu中解压这两种格式的压缩文件: 我们需要安装两款软件:1.7zip:2.Ark,这两款软件在Ubuntu的软件中心都有下载: 打开软件中心搜索rar,在列表中找到它们,直接安装就可以- 安装完成后,就可以直接双击打开rar和zip格式的文件了,即使是中文格式也不会报错- 如果要解压,鼠标

JAVA本地TXT文件解决中文乱码问题

import java.io.*; public class ReadFile { public static void main(String[] args) { try { File file = new File("E:\\JavaLog/logs/1.txt"); if (file.isFile() && file.exists()) { //读取的时指定GBK编码格式,若中文出现乱码请尝试utf-8,window默认编码格式为GBK BufferedReade

【转】JAVA解压.TAR.Z及.ZIP文件

 解压.ZIP文件 package app.qdupr.Method; import java.io.File; 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;

支持文件的流式压缩/解压IP*Works! Zip

IP*Works! Zip是为应用程序添加压缩功能的完全可控件组件包.使用简单.速度快并且效率很高,是一个为桌面和网上应用程序添加压缩和解压缩功能的组件套包./n software IP*Works! Zip支持Zip.Tar.Gzip 和 Jar压缩标准,特别的,它支持流式压缩.加密压缩,在压缩包里就可以直接删除文件.我们目前提供完全可控的纯C# .NET组件.纯Java Beans. 产品特征: IP*Works! Zip基于纯C#代码,是完全可控的.NET组件,不依赖于任何外部代码.是完全