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
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();
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 \
.
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