zoukankan      html  css  js  c++  java
  • Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php

    Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php  

    1. Jdk zip apache ant zip 1

    2. Apache Ant包进行ZIP文件压缩,upzip 大概流程.. 1

    3. 读文件名称ok,但是cant读取到inputNPE.. 2

    4. Ant1.8.2.jar 2

    5. #---详细code 2

    6. 参考 4

    1.  Jdk zip apache ant zip

    下面实现的功能是zip文件中的图像文件解压到当前目录下,用jdk自带的处理zip文件的代码处理的,但是不能处理中文名称的文件,要不然就会出错。

    下面是用的apache的zip文件处理包进行处理的,可以处理中文名称的文件,功能跟上面的一样。

    使用apache ant version1.7的tools.zip来解压zip文件,解决中文问题

    1.7 blow的好像还是不支持中文..

    作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

    2. Apache Ant包进行ZIP文件压缩,upzip 大概流程..

    许多年前就遇到过这种业务,对ZIP标准压缩文件解压。之前写的操作类现在找不到了,最近项目中又要处理这种业务,所以重新写了一个。Java提供 了处理ZIP包的API。但是对中文支持不是很好,所以我直接用Apache Ant里的ZIP操作API来进行处理。ANTAPI解决了中文支持问题,而且用起来也非常方便。以下是操作类。

    以下的类只是用到Apache的一小部分功能。具体更多的API,请参考文档。在此不多说明了。

    * 在项目中导入Apacheant.jar包到Lib

    3. 读文件名称ok,但是cant读取到inputNPE..

    Cause:::encode问题.. 默认好像是utf8..but 实际是gbk... 

    org.apache.tools.zip.ZipFile zipFile =new ZipFile(zipFileName, "gbk");

     

    二、在unZipFiles方法中直接使用ZipFile zip = new ZipFile(zipFile); 解压缩时发现中文仍然乱码,改成ZipFile zip = new ZipFile(zipFile,“GBK”); 后中文正常了,可能和项目具体配置与运行环境有关吧。

     

    4. Ant1.8.2.jar

    5. #---详细code

    /**

     * 解压静态方法

     * @param zipFileName

     * @param outputDirectory

     * @throws Exception

     */

    public static void extract(String zipFileName,String outputDirectory,String encodethrows Exception{

    try {

    // = "utf-8";

    org.apache.tools.zip.ZipFile zipFile =new ZipFile(zipFileName, encode);

    //new org.apache.tools.zip.ZipFile(zipFileName);

    java.util.Enumeration e = zipFile.getEntries();

    org.apache.tools.zip.ZipEntry zipEntry = null;

    while (e.hasMoreElements()){

    zipEntry = (ZipEntry)e.nextElement();

     System.out.println("unziping "+zipEntry.getName());

     try {

     upzip(outputDirectory, zipFile, zipEntry);

    catch (zipEntryIsNullEx e2) {

     System.out.println(e2.getMessage());

     System.out.println("------------");

    }

    }

    }

    catch (Exception ex){

    System.out.println("解压文件异常"+ex.getMessage());

    ex.printStackTrace();

    }

    }

    private static void upzip(String outputDirectory, org.apache.tools.zip.ZipFile zipFile, org.apache.tools.zip.ZipEntry zipEntrythrows  IOException, ZipException, FileNotFoundException, zipEntryIsNullEx {

    if (zipEntry.isDirectory()){

    String name=zipEntry.getName();

    name=name.substring(0,name.length()-1);// for del fesyegeor

    mkDirs(outputDirectory+File.separator+name);

    //System.out.println("创建目录:"+outputDirectory+File.separator+name);

    }else{  //file entry o9o

    String name=zipEntry.getName();

    String dir = name.substring(0,name.lastIndexOf("/"));

    mkDirs(outputDirectory+File.separator+dir);

    //System.out.println("创建文件:"+outputDirectory+File.separator+name);

    File f=new File(outputDirectory+File.separator+zipEntry.getName());

    f.createNewFile();

    InputStream in = zipFile.getInputStream(zipEntry);

    if(in==null)

    throw new zipEntryIsNullEx("zipEntryIsNullEx:"+name);

    FileOutputStream out=new FileOutputStream(f);

    int c;

    byte[] by=new byte[1024];

    while((c=in.read(by)) != -1){

    out.write(by,0,c);

    }

    out.close();

    in.close();

    }

    }

    6. 参考

    Apache Ant包进行ZIP文件压缩 - 抹去浮华,沉淀深度 - ITeye技术网站.htm

    基于apache zip包的压缩和解压缩程序_Crusoe_新浪博客

    我要啦免费统计
  • 相关阅读:
    Resize a VMWare disk (zz)
    StepbyStep: Installing SQL Server Management Studio2008 Express after Visual Studio 2010(zz)
    (C#)利用反射动态调用类成员[转载]
    Discuz!NT 系统架构分析 (转)
    C#反射实例讲解(转)
    什么是反射?
    创建保存图片目录
    取资源文件中的值 System.Resources.ResourceManager
    Net中的反射使用入门
    iis上实现虚拟目录
  • 原文地址:https://www.cnblogs.com/attilax/p/5963861.html
Copyright © 2011-2022 走看看