web-dev-qa-db-ja.com

Java 9 Zip End Header Not Found Exception

Google社員向けの編集:これは、Java 9の古いベータリリースを使用したことが原因であることが判明しました。

Java- SRTM files を使用してこの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);
    }

なぜこれが失敗するのか誰かが私を助けることができますか?

11
gansub

Java 9には、この例外について言及している(すでにクローズされている)バグがいくつかあります(例 JDK-8170276JDK-8172872 )) 。Java 9はまだベータ版であり、1年以上前のバージョン(2016-04-14と執筆時点の2017年7月)を使用しているため)にアップグレードする必要があります最新Java 9 EAリリースまたはJava 8の公開リリースまでJava 9。

7
Adam Michalik