2016-09-09 4 views
0

Voici mon code.J'écris ceci pour télécharger des mouches mp3, des fichiers vidéo & images. i utilisé FileOutputStream pour la gestion des fichiers .. Tous téléchargement de fichiers bien .. fichiers mp3 sont des images et des vidéos working..but sont corrompusTélécharger le fichier avec java - Fichiers corrompus

private void download(String fileURL, String destinationDirectory,String name) throws IOException { 

     // File name that is being downloaded 
     String downloadedFileName = name; 
     // Open connection to the file 
     URL url = new URL(fileURL); 

     InputStream is = url.openStream(); 
     // Stream to the destionation file 
     FileOutputStream fos = new FileOutputStream(destinationDirectory + "/" + downloadedFileName); 

     // Read bytes from URL to the local file 
     byte[] buffer = new byte[4096]; 
     int bytesRead = 0; 

     System.out.println("Downloading " + downloadedFileName); 
     while ((bytesRead = is.read(buffer)) != -1) { 
      fos.write(buffer, 0, bytesRead); 
     } 

     // Close destination stream 
     fos.close(); 
     // Close URL stream 
     is.close(); 
    } 
+0

Ce code devrait fonctionner correctement ... Mais vous devriez apprendre à ouvrir et fermer vos ressources correctement. En particulier, utilisez une instruction try-with-resources. – fge

Répondre

1

J'ai essayé votre routine. Fonctionne bien pour moi.

J'utilise l'URL

"http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3"

et a obtenu un fichier MP3 jouable exactement 1.430.174 octets.

Ensuite, j'essayé JPEG:

"http://weknowyourdreams.com/images/beautiful/beautiful-01.jpg"

fonctionne très bien.

Je suppose que vous avez utilisé l'URL d'une page Web à la place du fichier audio/vidéo/image par erreur. Par exemple, si vous avez utilisé l'URL

« http://weknowyourdreams.com/image.php?pic=/images/beautiful/beautiful-01.jpg »

au lieu de celui ci-dessus, vous ne serez pas un bon JPG. Vous devrez utiliser "Afficher l'image" ou "Copier l'emplacement de l'image" dans votre navigateur.

+0

ce code fonctionne avec mp3..mais les images et vidéos sont corrompues –

+0

Est-ce que ça marche avec "http://weknowyourdreams.com/images/beautiful/beautiful-01.jpg"? –

+0

Fondamentalement, votre routine devrait fonctionner, mais j'utiliserais try-with-resources au lieu de close() et de flux tamponnés. Les flux tamponnés sont efficaces et vous pouvez copier avec un simple int c; while ((c = is.read())! = - 1) fos.write (c); sans prendre la peine de créer votre propre tampon. –

0

Vous pouvez essayer ce code,

URLConnection con = new URL(fileURL).openConnection(); 
    InputStream is = con.getInputStream(); 
    OutputStream fos = new FileOutputStream(new File(destinationDirectory + "/" + name)); 
    byte[] buffer = new byte[4096]; 
    int bytesRead; 
    while ((bytesRead = is.read(buffer)) > 0) { 
     fos.write(buffer, 0, bytesRead); 
    } 
    fos.close(); 
+0

Comment est-ce différent du code dans la question? – Henry

+0

Il y a un déférent dans le flux ... –

0

vous devez utiliser BufferedOutputStream.

BufferedOutputStream bos = new BufferedOutputStream(fos); 

comme ceci:

private void download(String fileURL, String destinationDirectory,String name) throws IOException { 

     // File name that is being downloaded 
     String downloadedFileName = name; 
     // Open connection to the file 
     URL url = new URL(fileURL); 

     InputStream is = url.openStream(); 
     // Stream to the destionation file 
     FileOutputStream fos = new FileOutputStream(destinationDirectory + "/" + downloadedFileName); 
     BufferedOutputStream bos = new BufferedOutputStream(fos); 

     // Read bytes from URL to the local file 
     byte[] buffer = new byte[4096]; 
     int bytesRead = 0; 

     System.out.println("Downloading " + downloadedFileName); 
     while ((bytesRead = is.read(buffer)) != -1) { 
      bos.write(buffer, 0, bytesRead); 
     } 

     bos.flush(); 
     // Close destination stream 
     bos.close(); 
     // Close URL stream 
     is.close(); 
    } 
+0

"vous avez besoin de vider": Non, vous ne le faites pas. – Henry

+0

vous avez raison, La méthode flush de OutputStream ne fait rien. –

+0

pas besoin de flush..code fonctionne bien –