2017-07-04 100 views
5

Próbuję partii pobierania plików zip z tego adresu URL przy użyciu java - SRTM files i wymaga to nazwy użytkownika/hasła do pobrania i używam następującego kodu Java i daje mi następujący wyjątekJava 9 Zip End Nagłówek Nie znaleziono Wyjątek

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) 

to jest moja wersja 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) 

jest to kod, który używam do pobrania -

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); 
    } 

Czy ktoś może mi pomóc, dlaczego to się nie udaje?

+3

Ponieważ Java 9 jest nadal w wersji beta, spróbuj przejść najpierw do najnowszej wersji, być może to tylko błąd w JDK, który został już naprawiony. Znalazłem kilka, które wspominają ten wyjątek: https://bugs.openjdk.java.net/browse/JDK-8170276 https://bugs.openjdk.java.net/browse/JDK-8172872 –

+0

@AdamMichalik - dzięki za podpowiedź odpowiedź. Więc w Ubuntu 16.04 jak mogę dokonać aktualizacji? :) Po prostu zrób kolejną instalację? – gansub

+0

@AdamMichalik - Lepszą opcją byłoby zainstalowanie jdk-8? – gansub

Odpowiedz

5

Istnieje kilka (już zamkniętych) błędów w Javie 9, które wspominają ten wyjątek (np. JDK-8170276, JDK-8172872). Ponieważ Java 9 jest nadal w wersji beta i korzystasz z wersji sprzed ponad roku (2016-04-14 vs. lipiec 2017 r. Od czasu pisania), powinieneś uaktualnić do najnowszej wersji Java 9 EA lub trzymać się Java 8 do czasu wydania publicznej wersji Java 9.