2013-06-30 9 views
1

J'ai ce code qui télécharge un fichier .jar à partir d'une URL spécifique et le place dans un dossier spécifique. Le fichier jar téléchargé est un mod pour un jeu, ce qui signifie qu'il doit être téléchargé et exécuté correctement sans être corrompu. Le problème est que, chaque fois que j'essaie de télécharger le fichier, il finit par être corrompu d'une manière ou d'une autre et provoque des erreurs lorsqu'il est chargé.Fichier jar téléchargé corrompu

Ceci est mon code de téléchargement:

final static int size=1024; 

public static void downloadFile(String fAddress, String localFileName, String destinationDir, String modID) { 
    OutputStream outStream = null; 
    URLConnection uCon = null; 

    InputStream is = null; 
    try { 
     URL Url; 
     byte[] buf; 
     int ByteRead,ByteWritten=0; 
     Url= new URL(fAddress); 
     outStream = new BufferedOutputStream(new 
       FileOutputStream(destinationDir+"/"+localFileName)); 

     uCon = Url.openConnection(); 
     is = uCon.getInputStream(); 
     buf = new byte[size]; 
     while ((ByteRead = is.read(buf)) != -1) { 
      outStream.write(buf, 0, ByteRead); 
      ByteWritten += ByteRead; 
     } 
     System.out.println("Downloaded Successfully."); 
     System.out.println("File name:\""+localFileName+ "\"\nNo ofbytes :" + ByteWritten); 
     System.out.println("Writing info file"); 
     WriteInfo.createInfoFile(localFileName, modID); 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      is.close(); 
      outStream.close(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Toutes les idées ce qui ne va pas avec ce code?

+0

Une note de côté: convention de codage dit que les noms de variables devraient commencer par une petite lettre. – abbas

+0

Il n'y a rien de manifestement faux avec ce code. En quoi le fichier téléchargé est-il corrompu? (Mauvaise longueur, octets substitués, ..) Pouvez-vous être sûr que ce n'est pas le serveur qui corrompt le fichier? – Joni

+0

Je sais que le fichier est très bien sur le serveur car j'ai essayé de le télécharger manuellement et de l'installer en utilisant mon navigateur web. Quand j'ai essayé ça, ça a bien marché – JamEngulfer

Répondre

0

Vous ne savez pas si cela va résoudre votre problème, mais vous devriez vider votre tampon à la fin.

outStream.flush(); 
+0

Non, n'a pas résolu le problème. Obtenir la même erreur – JamEngulfer

0

votre code semble tout à fait correct; essayez ceci

public static void downloadFromUrl(String srcAddress, String userAgent, String destDir, String destFileName, boolean overwrite) throws Exception 
    { 
     InputStream is = null; 
     FileOutputStream fos = null; 

     try 
     { 
     File destFile = new File(destDir, destFileName); 
     if(overwrite && destFile.exists()) 
     { 
      boolean deleted = destFile.delete(); 
      if (!deleted) 
      { 
       throw new Exception(String.format("d'ho, an immortal file %s", destFile.getAbsolutePath())); 
      } 
     } 

     URL url = new URL(srcAddress); 
     URLConnection urlConnection = url.openConnection(); 

     if(userAgent != null) 
     { 
      urlConnection.setRequestProperty("User-Agent", userAgent); 
     } 

     is = urlConnection.getInputStream(); 
     fos = new FileOutputStream(destFile); 

     byte[] buffer = new byte[4096]; 

     int len, totBytes = 0; 
     while((len = is.read(buffer)) > 0) 
     { 
      totBytes += len; 
      fos.write(buffer, 0, len); 
     } 

     System.out.println("Downloaded successfully"); 
     System.out.println(String.format("File name: %s - No of bytes: %,d", destFile.getAbsolutePath(), totBytes)); 
     } 
     finally 
     { 
     try 
     { 
      if(is != null) is.close(); 
     } 
     finally 
     { 
      if(fos != null) fos.close(); 
     } 
     } 
    } 
+0

Je me demandais, quelle est la chaîne userAgent supposée être? – JamEngulfer

+0

En outre, j'ai essayé ceci et cela n'a pas fonctionné tout à fait. Le fichier téléchargé et tout, mais il semblait être corrompu quand j'ai essayé de le charger. J'ai 'java.lang.NoSuchFieldError: field_77777_bU' qui n'est pas un problème avec le code du fichier téléchargé, comme je peux le télécharger très bien via mon navigateur web et ne pas avoir d'erreurs – JamEngulfer

+0

un exemple ici: http: // home -1.worldonline.nl/~bmc88/java/sbook/045.html - chaînes de caractères: http://it.wikipedia.org/wiki/User_agent – mrddter

Questions connexes