2017-07-04 14 views
5

このURLからjava-SRTM filesを使用してzipファイルを一括ダウンロードしようとしていますが、ダウンロードにユーザー名とパスワードが必要です。次のjavaコードを使用しています。Java 9ジップエンドヘッダーが見つかりません例外

java.util.zip.ZipException: zip END header not found 
at java.util.zip.ZipFile$Source.zerror([email protected]/ZipFile.java:1210) 
at java.util.zip.ZipFile$Source.findEND([email protected]/ZipFile.java:1119) 
at java.util.zip.ZipFile$Source.initCEN([email protected]/ZipFile.java:1126) 
at java.util.zip.ZipFile$Source.<init>([email protected]/ZipFile.java:963) 
at java.util.zip.ZipFile$Source.get([email protected]/ZipFile.java:933) 
at java.util.zip.ZipFile.<init>([email protected]/ZipFile.java:213) 
at java.util.zip.ZipFile.<init>([email protected]/ZipFile.java:145) 
at java.util.zip.ZipFile.<init>([email protected]/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); 
    } 

これがなぜ失敗するのか誰かが助けてくれますか?

+3

Java 9はまだベータ版であるため、最初に最新バージョンにアップグレードしてください。おそらく、すでに修正されているJDKのバグだけかもしれません。私はこの例外に言及したいくつかを見つけました:https://bugs.openjdk.java.net/browse/JDK-8170276 https://bugs.openjdk.java.net/browse/JDK-8172872 –

+0

@AdamMichalik - ありがとう応答。だからUbuntu 16.04でどうすればアップグレードできますか? :)ちょうど別のインストールを行う? – gansub

+0

@AdamMichalik - jdk-8をインストールする方が良いでしょうか? – gansub

答えて

5

Java 9には、この例外(例:JDK-8170276JDK-8172872など)のバグがいくつかあります。 Java 9はまだベータ版であり、1年以上前のバージョン(2016-04-14対執筆時点の2017年)を使用しているので、最新のJava 9 EAリリースにアップグレードするか、Java 8に固執する必要がありますJava 9の一般公開まで。

関連する問題