2010-09-06 60 views
4

我用下面的方法來下載一個MP3文件在: http://online1.tingclass.com/lesson/shi0529/43/32.mp3如何使用Java在線下載mp3文件?

但我得到了以下錯誤:

java.io.FileNotFoundException:HTTP:\ online1.tingclass.com \教訓\ 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(); } 
    } 

然而,如果我從手工瀏覽器做到這一點,該文件是存在的,我不知道爲什麼它不工作,什麼是正確的做法?

弗蘭克

回答

12

使用舊式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

當你創建一個FileInputStream,你總是訪問本地文件系統。相反,您應該使用URLConnection通過HTTP訪問文件。

這個指標是正斜槓/已變成反斜槓\

1

FileInputStream僅用於訪問本地文件。如果您要訪問的網址,你可以設置的內容的的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); 

或者更簡單地說只是讓從myUrlStream和週期的BufferedInputStream直到EOF讀/寫操作上myUrlStream發現。

乾杯, Andrea