2013-06-30 2 views
1

У меня есть этот код, который загружает файл .jar с определенного URL-адреса и помещает его в определенную папку. Загруженный файл jar - это мода для игры, что означает, что его нужно загружать и запускать правильно, не будучи поврежденным.Загруженный файл jar поврежден

Проблема в том, что каждый раз, когда я пытаюсь загрузить файл, он в какой-то мере повреждается и вызывает ошибки при его загрузке.

Это мой скачать код:

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

Любые идеи, что не так с этим кодом?

+0

Замечание: соглашение о кодировании говорит, что имена переменных должны начинаться с небольшой буквы. – abbas

+0

Нет ничего явно неправильного в этом коде. Каким образом загруженный файл поврежден? (Неверная длина, байты заменены, ..) Можете ли вы быть уверены, что это не сервер, который развращает файл? – Joni

+0

Я знаю, что файл отлично на сервере, потому что я пытался вручную загрузить и установить его с помощью моего веб-браузера. Когда я попробовал это, он отлично работал – JamEngulfer

ответ

0

Не уверен, что это решит вашу проблему, но вы должны очистить буфер в конце.

outStream.flush(); 
+0

Нет, не решил проблему. Получение такой же ошибки – JamEngulfer

0

ваш код выглядит совершенно правильно; попробуйте это

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

Просто интересно, какова должна быть строка userAgent? – JamEngulfer

+0

Кроме того, я пробовал это, и это не совсем сработало. Файл загружен и все, но он оказался поврежденным, когда я попытался загрузить его. Я получил 'java.lang.NoSuchFieldError: field_77777_bU', который не является проблемой с кодом загруженного файла, так как я могу загрузить его через мой веб-браузер и не получить никаких ошибок. – JamEngulfer

+0

Пример здесь: http: // home -1.worldonline.nl/~bmc88/java/sbook/045.html - ua строки: http://it.wikipedia.org/wiki/User_agent – mrddter

Смежные вопросы