Download .jar von github lädt kaputte Datei runter

Tobero

Mitglied
Ich möchte eine .jar Datei von Github runterladen. Ich habe folgendes gefunden.
Aber der von mir kopierte code scheint die Datei nicht vollständig herunter zuladen.
Ich erhalte zwar die Datei, aber wenn ich sie probiere zu einer .zip zu konvertieren, dann bekomme ich nur einen Fehler, der Sagt, das diese Datei ungütlig ist. Wenn ich die größe der (eigentlich) identischen Dateien vergleiche, have ich die gleiche größe.
Es wird nicht an meiner Datei liegen, da ich das selbe (zu .zip) geklappt hat.
Java:
public static void DownloadExtension(ExtensionObject extension, String directory) throws IOException {
        String link = extension.getDownload().toString();
        String fileName = extension.getName() + ".jar";
        URL url = new URL(link);
        HttpURLConnection http = (HttpURLConnection)url.openConnection();
        Map<String, List<String>> header = http.getHeaderFields();
        while(isRedirected(header)) {
            link = header.get("Location").get( 0 );
            url = new URL( link );
            http = (HttpURLConnection)url.openConnection();
            header = http.getHeaderFields();
        }
        InputStream input  = http.getInputStream();
        byte[] buffer = new byte[4096];
        int n = -1;
        OutputStream output = new FileOutputStream(new File(directory + "/" + fileName));
        while ((n = input.read(buffer)) != -1) {
            output.write( buffer, 0, n );
        }
        output.close();
    }
 
Der Code funktioniert einwandfrei, vermutlich hast Du einfach eine falsche URL angegeben.

Aus dem Stackoverflow-Thread angepasstes Beispiel:
Java:
import java.net.*;
import java.io.*;
import java.util.*;

public class Download {
   private static boolean isRedirected( Map<String, List<String>> header ) {
      for( String hv : header.get( null )) {
         if(   hv.contains( " 301 " )
            || hv.contains( " 302 " )) return true;
      }
      return false;
   }
   public static void main( String[] args ) throws Throwable
   {
      String fileName = "syslog4j-0.9.46.jar";
      String link =
         "https://github.com/kbase/jars/raw/master/lib/jars/syslog4j/" +
         fileName;
      URL               url  = new URL( link );
      HttpURLConnection http = (HttpURLConnection)url.openConnection();
      Map< String, List< String >> header = http.getHeaderFields();
      while( isRedirected( header )) {
         link = header.get( "Location" ).get( 0 );
         url    = new URL( link );
         http   = (HttpURLConnection)url.openConnection();
         header = http.getHeaderFields();
      }
      InputStream  input  = http.getInputStream();
      byte[]       buffer = new byte[4096];
      int          n      = -1;
      OutputStream output = new FileOutputStream( new File( fileName ));
      while ((n = input.read(buffer)) != -1) {
         output.write( buffer, 0, n );
      }
      output.close();
   }
}
 
Der Code funktioniert einwandfrei, vermutlich hast Du einfach eine falsche URL angegeben.

Aus dem Stackoverflow-Thread angepasstes Beispiel:
Java:
import java.net.*;
import java.io.*;
import java.util.*;

public class Download {
   private static boolean isRedirected( Map<String, List<String>> header ) {
      for( String hv : header.get( null )) {
         if(   hv.contains( " 301 " )
            || hv.contains( " 302 " )) return true;
      }
      return false;
   }
   public static void main( String[] args ) throws Throwable
   {
      String fileName = "syslog4j-0.9.46.jar";
      String link =
         "https://github.com/kbase/jars/raw/master/lib/jars/syslog4j/" +
         fileName;
      URL               url  = new URL( link );
      HttpURLConnection http = (HttpURLConnection)url.openConnection();
      Map< String, List< String >> header = http.getHeaderFields();
      while( isRedirected( header )) {
         link = header.get( "Location" ).get( 0 );
         url    = new URL( link );
         http   = (HttpURLConnection)url.openConnection();
         header = http.getHeaderFields();
      }
      InputStream  input  = http.getInputStream();
      byte[]       buffer = new byte[4096];
      int          n      = -1;
      OutputStream output = new FileOutputStream( new File( fileName ));
      while ((n = input.read(buffer)) != -1) {
         output.write( buffer, 0, n );
      }
      output.close();
   }
}
[/QUOTE]
Danke. Habe jetzt nochmal nachgesehen... und habe das "r" bei .jar vergessen.
 
Wobei das "jar" oben in Deinem Code drin wäre, aber vielleicht meintest Du an anderer Stelle. Jedenfalls übersieht man sowas leicht.
 

Zurück
Oben