2013-10-13 33 views
3

我如何可以轉換的InputStream的網址是什麼?這裏是我的代碼:的Java轉換的InputStream URL

InputStream song1 = this.getClass().getClassLoader().getResourceAsStream("/songs/BrokenAngel.mp3"); 
URL song1Url = song1.toUrl(); //<- pseudo code 
MediaLocator ml = new MediaLocator(song1Url); 
Player p; 
try { 
    p = Manager.createPlayer(ml); 
    p.start(); 
} catch (NoPlayerException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

不,你不能,除非輸入流被讀取。 – 2013-10-13 18:09:47

回答

1

注意,這種方法需要的MP3是你的應用程序的子目錄稱爲歌曲中。您還可以使用在/songs/BrokenAngel.mp3部分(../../或類似的東西相對尋路,但它需要你的應用程序目錄的基礎!

File appDir = new File(System.getProperty("user.dir")); 
    URI uri = new URI(appDir.toURI()+"/songs/BrokenAngel.mp3"); 
    // just to check if the file exists 
    File file = new File(uri); 
    System.out.println(file.exists()) 
    URL song1Url = uri.toURL(); 
-1

試試這個

InputStream input = new URL("http://www.somewebsite.com/a.txt").openStream(); 
3

我不知道你真的想這樣做。如果你需要的網址爲您的特定的任務只是執行以下操作:

URL url = this.getClass().getClassLoader().getResource("/songs/BrokenAngel.mp3");

然而,如果你在你的代碼的一部分檢索輸入流,然後將它傳遞到另一個模塊,並有希望找到什麼是源這個輸入流的URL幾乎是不可能的。問題是,你得到BufferedInputStream,其中包裝FileInputStream不存儲關於它的信息源。即使使用反射,也無法檢索它。如果你真的想要做到這一點,你可以做到以下幾點。

  1. 實現你自己的UrlInputStream extends InputStream進入構造URL,並將其存儲在類varible,由url.openStream()調用創建輸入流並把它封裝。

  2. 現在,直到你有來檢索URL,你可以用你的流照常輸入流。此時,您必須將其投射到您的UrlInputStream並請撥打getUrl()方法,您將執行。

+0

但後來我得到一個空指針exeption:'異常線程 「main」 顯示java.lang.NullPointerException \t在javax.media.MediaLocator (MediaLocator.java:37) \t在com.ymail.sanchixx.sanchixx.Interface。 .initComposant(Interface.java:39) \t at com.ymail.sanchixx.sanchixx.Interface。(Interface.java:31) \t在com.ymail.sanchixx.sanchixx.Main.main(Main.java:8)' – sanchixx

+0

你能更新你的帖子,用新的代碼,所以我們可以找到新的錯誤? – Vallentin

0

試試這個

URI uri = new URI("/songs/BrokenAngel.mp3"); 
URL song1Url = uri.toURL(); 

MediaLocator ml = new MediaLocator(song1Url); 
Player p; 
try { 
    p = Manager.createPlayer(ml); 
    p.start(); 
} catch (NoPlayerException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

'線程中的異常「main」java.lang.IllegalArgumentException:URI不是絕對的 \t at java.net.URI.toURL(Unknown Source) \t at com.ymail.sanchixx.sanchixx.Interface.initComposant(Interface.java :49) \t在com.ymail.sanchixx.sanchixx.Interface。 (Interface.java:33) \t在com.ymail.sanchixx.sanchixx.Main.main(Main.java:8)' – sanchixx

相關問題