Как использовать Java для скачивания mp3 файла онлайн? - PullRequest
5 голосов
/ 06 сентября 2010

Я использовал следующий метод для загрузки файла mp3 по адресу: http://online1.tingclass.com/lesson/shi0529/43/32.mp3

Но я получил следующую ошибку:

java.io.FileNotFoundException: http: \ online1.tingclass.com \ lesson \ shi0529 \ 43 \ 32.mp3 (неверный синтаксис имени файла, имени каталога или метки тома)

  public static void Copy_File(String From_File,String To_File)
  {   
    try
    {
      FileChannel sourceChannel=new FileInputStream(From_File).getChannel();
      FileChannel destinationChannel=new FileOutputStream(To_File).getChannel();
      sourceChannel.transferTo(0,sourceChannel.size(),destinationChannel);
      // or
      //  destinationChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
      sourceChannel.close();
      destinationChannel.close();
    }
    catch (Exception e) { e.printStackTrace(); }
  }

Тем не менее, если я делаю это из браузера вручную, файл есть, я удивляюсь, почему он не работает и как правильно это сделать?

Frank

Ответы [ 3 ]

14 голосов
/ 06 сентября 2010

Использование старой школы Java IO, но вы можете сопоставить это с методом NIO, который вы используете. Ключевым моментом является использование URLConnection.

    URLConnection conn = new URL("http://online1.tingclass.com/lesson/shi0529/43/32.mp3").openConnection();
    InputStream is = conn.getInputStream();

    OutputStream outstream = new FileOutputStream(new File("/tmp/file.mp3"));
    byte[] buffer = new byte[4096];
    int len;
    while ((len = is.read(buffer)) > 0) {
        outstream.write(buffer, 0, len);
    }
    outstream.close();
2 голосов
/ 06 сентября 2010

Когда вы создаете FileInputStream, вы всегда получаете доступ к вашей локальной файловой системе. Вместо этого вы должны использовать URLConnection для доступа к файлам по HTTP.

Индикатором этого является то, что косые черты / превратились в косые черты \.

1 голос
/ 06 сентября 2010

FileInputStream используется только для доступа к локальным файлам.Если вы хотите получить доступ к содержимому URL, вы можете установить URLConnection или использовать что-то вроде этого:

URL myUrl = new URL("http://online1.tingclass.com/lesson/shi0529/43/32.mp3");
InputStream myUrlStream = myUrl.openStream();
ReadableByteChannel myUrlChannel = Channels.newChannel(myUrlStream);

FileChannel destinationChannel=new FileOutputStream(To_File).getChannel();
destinationChannel.transferFrom(myUrlChannel, 0, sizeOf32MP3);

Или, проще, просто сделать BufferedInputStream из myUrlStream и циклически выполнять операцию чтения / записи, пока не будет найден EOFна myUrlStream.

Ура, Андреа

...