2016-09-09 5 views
0

Вот мой код.и написал это, чтобы скачать mp3 мух, видеофайлов & изображений. я использовал FileOutputStream для обработки файлов .. Всех файлы скачивают хорошо .. mp3 файлов working..but изображений и видео поврежденыЗагрузка файла с помощью java - Файлы повреждены

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

Этот код должен работать нормально ... Но вы должны научиться открывать и правильно закрыть свои ресурсы. В частности, используйте инструкцию try-with-resources. – fge

ответ

1

Я пробовал вашу рутину. Прекрасно работает для меня.

Я использовал URL

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

и получил воспроизводимый файл MP3 ровно 1430174 байт.

Далее я попытался JPEG:

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

работает отлично.

Я подозреваю, что произошло то, что вы использовали URL-адрес веб-страницы вместо аудио/видео/файла pic по ошибке. Например, если вы использовали URL

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

вместо одного выше, вы не получите правильный JPG. Вы должны будете использовать «Просмотр изображения» или «Скопировать расположение изображения» в своем браузере.

+0

этот код работает с mp3..but изображения и видео повреждены –

+0

Работает ли он с "http://weknowyourdreams.com/images/beautiful/beautiful-01.jpg"? –

+0

В основном ваша работа должна работать, но я бы использовал try-with-resources вместо close() и Buffered streams. Буферные потоки эффективны, и вы можете копировать с помощью простого int c; while ((c = is.read())! = - 1) fos.write (c); , не беспокоясь о создании собственного буфера. –

1

Посмотри на таких библиотеках, как Apache IO. У этого есть много вспомогательных методов, таких как redirecting streams.

0

Вы можете попробовать этот код,

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

Как это отличается от кода в вопросе? – Henry

+0

В потоке есть отклонение ... –

0

вам нужно использовать BufferedOutputStream.

BufferedOutputStream bos = new BufferedOutputStream(fos); 

так:

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

«вам нужно помыться»: Нет, нет. – Henry

+0

Вы правы, метод flush OutputStream ничего не делает. –

+0

не нужно очищать..код работать хорошо –