6

如何将 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();
}
4

5 回答 5

3

我不确定你真的想这样做。如果您需要特定任务的 URL,只需执行以下操作:

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

但是,如果您在代码的一部分中检索输入流,然后将其传递给另一个模块,并且想要找到该输入流的源 URL 是什么“几乎”是不可能的。问题是您得到BufferedInputStream的包装FileInputStream不存储有关其来源的信息。即使使用反射,您也无法检索它。如果您真的想这样做,您可以执行以下操作。

  1. 实现你拥有UrlInputStream extends InputStream 进入构造函数的gets URL,将它存储在类变量中,通过调用创建输入流url.openStream()并包装它。

  2. 现在您可以像往常一样使用您的流作为输入流,直到您必须检索 URL。此时,您必须将其转换为 您将实现的UrlInputStream并调用getUrl()方法。

于 2013-10-13T18:27:27.567 回答
1

我想你想要的是ClassLoader.findResource(String)

那应该返回一个格式正确的 jar:// URL。不过我自己没有测试过,所以要小心

于 2013-10-13T18:16:16.320 回答
1

请注意,这种方法要求 mp3 位于应用程序的名为 song 的子目录中。您还可以对/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();
于 2013-10-13T19:19:18.420 回答
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();
}
于 2013-10-13T18:36:15.870 回答
-2

试试这个

InputStream input = new URL("http://www.somewebsite.com/a.txt").openStream();
于 2013-10-13T18:04:30.207 回答