开发者

How to use Java to download a mp3 file online?

开发者 https://www.devze.com 2023-01-15 05:13 出处:网络
I used the following method to download an mp3 file at : http://online1.tingclass.com/lesson/shi0529/43/32.mp3

I used the following method to download an mp3 file at : http://online1.tingclass.com/lesson/shi0529/43/32.mp3

But I got the following error :

java.io.FileNotFoundException: http:\online1.tingclass.com\lesson\shi0529\43\32.mp3 (The filename, directory name, or volume label syntax is incorrect)

  public static void Copy_File(String From_File,String To_File)
  {   
    try
    {
      FileCha开发者_如何转开发nnel 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(); }
  }

Yet if I do it from a browser by hand, the file is there, I wonder why it didn't work, and what's the right way to do it ?

Frank


Using old-school Java IO, but you can map this to the NIO method you are using. Key thing is use of 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();


When you create a FileInputStream, you always access your local filesystem. Instead, you should use a URLConnection for accessing files over HTTP.

The indicator for this is that the forward slashes / have turned into backward slashes \.


FileInputStream is used to access local files only. If you want to access the content of an URL you can setup an URLConnection or use something like this:

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

Or more simply just make a BufferedInputStream from myUrlStream and cycle the read/write operation until EOF is found on myUrlStream.

Cheers, Andrea

0

精彩评论

暂无评论...
验证码 换一张
取 消