• 解决java中ZipFile解压缩时候的中文路径和乱码问题


    JAVA中对jar文件或zip文件解压的时候,能够使用JDK内置的API:JarFile和ZipFile,在windows下解压这2种格式文件的时候,常常报下面错误:

    Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
    	at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
    	at java.util.zip.ZipFile.getZipEntry(ZipFile.java:531)
    	at java.util.zip.ZipFile.access$900(ZipFile.java:56)
    	at java.util.zip.ZipFile$1.nextElement(ZipFile.java:513)
    	at java.util.zip.ZipFile$1.nextElement(ZipFile.java:483)


    出现这样的问题有2种可能:

    1、拿到的zip或jar本身就是损坏的,这个时候能够使用winRAR等软件进行解压。

          假设没有报错,那么能够证明:拿到的压缩文件是没有问题的。

    2、字符集问题,zip或jar中含有中文的文件名称或文件路径。

     

    //windows下自己用winRAR压缩文件
    File file = new File("C:/Users/aty/Desktop/demo.zip");
    
    ZipFile zip = new ZipFile(file);
    
    Enumeration<? extends ZipEntry> entrys = zip.entries();
    
    while (entrys.hasMoreElements()) {
    	ZipEntry entry = entrys.nextElement();
    
    	System.out.println(entry.getName());
    }
    zip.close();

    在windows下,将名称含有中文的文件或文件夹,用winRAR制作一个demo.zip文件,执行上面代码会发现抛异常。这是由于中文windows环境下,操作系统默认的字符集是GBK,可是ZipFile仅仅能识别UTF-8格式。所以当zip文件里含有中文(但不是UTF-8编码)的时候,java的 ZipFile就会报错。

    这个问题在JDK1.7及其之后,解决问题是非常easy的。JDK提供了构造函数,同意我们指定zip文件的字符集。

    public ZipFile(String name, Charset charset) throws IOException  


    假设在JDK1.6或之前,那么能够使用ant.jar中提供的org.apache.tools.zip.ZipFile,使用方式跟JDK1.7中的ZipFile非常相似。

    能够看到JDK1.7中ZipFile同意我们指定字符集,可是JarFile这个类还是固定使用UTF-8格式。 

  • 相关阅读:
    VUE动态组件component以及<keep-alive>
    git flow工作流
    vue组件通讯
    webpack加载器和自动打包工具
    webpack的插件使用,以及引入vue文件的注意事项
    webpack起步以及手动配置config文件
    git 基本操作
    C++中静态成员变量的可以在类内初始化吗?
    python 环境变量设置PYTHONPATH
    vector中resize和reserve的区别
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4232262.html
Copyright © 2020-2023  润新知