Edit for Googlers: cela s'est avéré être dû à l'utilisation d'une version bêta obsolète de Java 9.
J'essaie de télécharger par lots des fichiers Zip à partir de cette URL en utilisant Java - fichiers SRTM et cela nécessite un nom d'utilisateur/mot de passe pour télécharger et j'utilise ce qui suit Java code et il me donne l'exception suivante
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)
Ceci est ma version de 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)
Voici le code que j'utilise pour télécharger -
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);
}
Quelqu'un peut-il m'aider à comprendre pourquoi cela échoue?
Il y a quelques bogues (déjà fermés) pour Java 9 qui mentionnent cette exception (par exemple JDK-8170276 , JDK-8172872 ) . Étant donné que Java 9 est toujours en version bêta et que vous utilisez une version datant de plus d'un an (2016-04-14 par rapport à juillet 2017 au moment de la rédaction), vous devez passer à la version dernière version Java 9 EA version ou s'en tenir à Java 8 jusqu'à une version publique de Java 9.