2013-05-28 4 views
2

J'essaie de télécharger un fichier binaire via une connexion http. Cependant, mon code renvoie une erreur java.io.FileOutputStream.write (Unknown Source). Je ne suis pas sûr de ce que je fais mal.ArrayIndexOutOfBoundsException écrit dans le fichier

public void GetFileDownload(String URI) throws IOException{ 
    /* 
    * Given a URI this method will grab the binary data from that page over the http protocol 
    */ 
    URL inputURI; 
    HttpURLConnection connect; 
    BufferedReader input; 
     inputURI = new URL(URI); 
     connect = (HttpURLConnection) inputURI.openConnection(); 
     connect.setReadTimeout(10000); 
     connect.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401"); 
     connect.setRequestMethod("GET"); 
     input = new BufferedReader(new InputStreamReader(connect.getInputStream())); 
     byte[] buffer = new byte[4096]; 
     int n = - 1; 

     String file = "test"; 
     int i = 0; 
     OutputStream output = new FileOutputStream(file); 
     while (i != buffer.length - 1){ 
      i++; 
      System.out.print(buffer[i]); 
     } 
     while ((n = input.read()) != -1) 
      output.write(buffer, 0, n); 
     output.close(); 
} 
+0

Votre code génère une erreur ArrayIndexOutOfBounds. Ce que vous avez fourni est la ligne supérieure de la trace de la pile, pas l'exception elle-même. Pas beaucoup d'utilisation. – EJP

Répondre

0
 String link = "<YOUR_URL>/" + "download.jar"; // jar is binary 
     String   fileName = "download.jar"; 
     URL    url = new URL(link); 
     HttpURLConnection http = (HttpURLConnection)url.openConnection(); 
     InputStream input = http.getInputStream(); 
     byte[]  buffer = new byte[2048]; 
     int   n  = -1; 
     OutputStream output = new FileOutputStream(new File(fileName)); 
     while ((n = input.read(buffer)) != -1) { //make sure your to check -1 and target buffer to read from 
     output.write(buffer, 0, n); 
     } 
     output.close(); 

Le code ci-dessus lève IOException et vous devez gérer l'exception.

+1

Cela fonctionne parfaitement. Je vous remercie. – JaminB

+0

@JaminB, :) Super cool. –

0

while ((n = input.read (buffer))! = -1)

Vous devez fournir le tampon cible à la méthode de lecture.

0

Votre boucle de copie est incorrecte. Il doit être:

while ((n = input.read(buffer)) > 0) 
{ 
    output.write(buffer, 0, n); 
} 

Vous générez un index de tableau hors limites.

Questions connexes