2010-09-06 4 views
4

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

Mais j'ai l'erreur suivante:

java.io.FileNotFoundException: http: \ online1.tingclass.com \ leçon \ shi0529 \ 43 \ 32.mp3 (le nom de fichier, nom de répertoire ou la syntaxe d'étiquette de volume est incorrect)

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 à partir d'un navigateur à la main, le fichier est là, je me demande pourquoi il ne fonctionne pas , et quelle est la bonne façon de le faire?

Frank

Répondre

12

Utilisation d'E/S Java d'ancienne génération, mais vous pouvez mapper cela à la méthode NIO que vous utilisez. L'élément 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(); 
2

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 / sont devenues des barres obliques inversées \.

1

FileInputStream est utilisé pour accéder aux fichiers locaux uniquement. Si vous souhaitez accéder au contenu d'une URL que vous pouvez configurer un 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 juste un BufferedInputStream de myUrlStream et le cycle de l'opération de lecture/écriture jusqu'à ce que EOF se trouve sur myUrlStream .

Cheers, Andrea

Questions connexes