Comment utiliser Java pour télécharger un fichier mp3 en ligne?


J'ai utilisé la méthode suivante pour télécharger un fichier mp3 à : http://online1.tingclass.com/lesson/shi0529/43/32.mp3

, Mais j'ai eu l'erreur suivante :

Java. io. FileNotFoundException: http:\online1.tingclass.com\lesson\shi0529\43\32.mp3 (La syntaxe du nom de fichier, du nom de répertoire ou de l'étiquette de volume est incorrecte)

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

Pourtant, si je le fais à la main à partir d'un navigateur, le fichier est là, je me demande pourquoi cela n'a pas fonctionné, et quelle est la bonne façon de le faire ?

Frank

Author: Frank, 2010-09-06

3 answers

En utilisant Java IO à l'ancienne, mais vous pouvez mapper cela à la méthode NIO que vous utilisez. La chose clé est l'utilisation de 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();
 14
Author: Joel, 2010-09-06 19:53:54

Lorsque vous créez un FileInputStream, vous accédez toujours à votre système de fichiers local. Au lieu de cela, vous devez utiliser un URLConnection pour accéder aux fichiers via HTTP.

L'indicateur pour cela est que les barres obliques en avant / se sont transformées en barres obliques en arrière \.

 2
Author: Roland Illig, 2010-09-06 19:24:06

FileInputStream est utilisé uniquement pour accéder aux fichiers locaux. Si vous souhaitez accéder au contenu d'une URL, vous pouvez configurer une URLConnection ou utiliser quelque chose comme ceci:

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

Ou plus simplement faire un BufferedInputStream à partir de myUrlStream et cycle l'opération de lecture/écriture jusqu'à ce que EOF soit trouvé sur myUrlStream.

Cheers, Andrea

 1
Author: nivox, 2010-09-06 19:59:16