当前位置: 首页 > 面试题库 >

找不到Java 9 Zip结束标头异常

罗昱
2023-03-14
问题内容

为Google员工编辑:这是由于使用Java 9的最新Beta版本引起的。

我正在尝试使用Java-
SRTM文件从该URL批量下载zip文件,并且它需要用户名/密码才能下载,并且我正在使用以下Java代码,因此出现以下异常

java.util.zip.ZipException: zip END header not found
at java.util.zip.ZipFile$Source.zerror(java.base@9-internal/ZipFile.java:1210)
at java.util.zip.ZipFile$Source.findEND(java.base@9-internal/ZipFile.java:1119)
at java.util.zip.ZipFile$Source.initCEN(java.base@9-internal/ZipFile.java:1126)
at java.util.zip.ZipFile$Source.<init>(java.base@9-internal/ZipFile.java:963)
at java.util.zip.ZipFile$Source.get(java.base@9-internal/ZipFile.java:933)
at java.util.zip.ZipFile.<init>(java.base@9-internal/ZipFile.java:213)
at java.util.zip.ZipFile.<init>(java.base@9-internal/ZipFile.java:145)
at java.util.zip.ZipFile.<init>(java.base@9-internal/ZipFile.java:159)
at toposwapper.rules.ZipFileDownloadAction.execute(ZipFileDownloadAction.java:29)

这是我的Java版本

 java openjdk version "9-internal"
 OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src)
 OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)

这是我正在下载的代码-

    URL url1 = null;
    URLConnection conn = null;
    InputStream inputs = null;
    FileOutputStream out = null;
    try 
    {
        url1 = new URL(url);
        conn = url1.openConnection();
        conn.setDoInput(true);
        conn.setDoOutput(false);
        conn.setRequestProperty("file-name", output.getName());
        conn.setRequestProperty("content-type","application/zip");
        String userpass = this.username + ":" + this.password;
        String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
        conn.setRequestProperty("Authorization",basicAuth);
    } 
  catch (MalformedURLException ex) {
           Logger.getLogger(SrtmDownloadManager.class.getName()).log(Level.SEVERE, "", ex);
    throw new TopoSwapperException(ex.getMessage());
    }
  catch (IOException ioe)
    {
    Logger.getLogger(SrtmDownloadManager.class.getName()).log(Level.SEVERE, "", ioe);
    throw new TopoSwapperException(ioe.getMessage());
    }

    try 
      {
         inputs = conn.getInputStream();
         out = new FileOutputStream(output);
         byte[] b = new byte[1024];
         int count;
         while ((count = inputs.read(b)) > -1)
          {
            out.write(b,0,count);
           }
         out.flush();
         inputs.close();
         out.close();

      } 
    catch (FileNotFoundException ex) 
    {
        throw new TopoSwapperException(ex.getMessage());
    } 
    catch (IOException ex) 
    {
    Logger.getLogger(SrtmDownloadManager.class.getName()).log(Level.SEVERE, "", ex);
    throw new TopoSwapperException(ex.getMessage());
    }
finally
    {
        close(inputs);
        close(out);
    }

有人可以帮我为什么会失败吗?


问题答案:

Java 9有几个(已经关闭的)Bug提到了此异常(例如
JDK-8170276和JDK-8172872)。由于Java
9仍处于测试阶段,并且您使用的是一年多以前的版本(2016年4月14日与撰写本文时的2017年7月),因此您应该升级到最新的Java 9
EA版本或坚持使用Java 8直到Java 9公开发布为止。



 类似资料:
  • 问题 我无法在IntelliJ build 182.4505上为导入的Eclipse项目编译Java代码。22在Java 9和10上。编译模块或任何单个文件时显示以下错误: 细节 已尝试 我已经在这里和这里查看了帖子,但没有提供任何相关细节。我尝试在Java9和Java10上编译,这没有什么区别。我已经在LinkedBag中编写了一个main方法,并尝试独立于JUnit运行该方法,这导致了相同的错

  • 我试图在java和c之间创建一个JNI应用程序,而include #include告诉我找不到jni.h。我已经查看了半打线程和网页,并尝试修复没有工作。如果有帮助的话,我在路径Library/Framework/javavm . Framework中没有任何东西,我不知道如何获得它。 我正在尝试构建一个 JNI 项目。我知道jni.h在路径/库/Java/Java虚拟机器/jdk1.7.0_51

  • 我正在使用iText7和java,我的问题是,当我试图打开一个现有的pdf文件时,这个例外。这是我的密码 为什么不起作用?

  • 谁能指导我怎么跑颤振呢。我在用铬做午餐 线程“main”java.util.zip.zipException:在java.base/java.util.zip.zipfile$source.zerror(zipfile.java:1567)在java.base/java.util.zip.zipfile$source.findend(zipfile.java:1462)在java.base/jav

  • 问题内容: 我有一个有趣的现象与PHP结束标记。我有一个通过Ajax调用执行的php文件。在php文件中包含具有各种功能的php库文件。当包含此库时,php响应中包含一堆空行。当我从库中删除结束标签时,这停止了。谁能告诉我这里发生了什么? 问题答案: 这是有据可查的。从PHP手册: 文件末尾的PHP块的结束标记是可选的,在某些情况下,当使用include()或require()时,它会有所帮助,因

  • 嗨,我试图读取一个PDF文件,这是由servlet上传。 这是密码 我的pdf是这样开始的%PDF-1.6 错误消息java.io.IOExcture:找不到PDF标头签名。