Java将inputStream转换为URL

Java将inputStream转换为URL,java,swing,jfxtras,Java,Swing,Jfxtras,如何将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 = M

如何将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();
}
InputStream song1=this.getClass().getClassLoader().getResourceAsStream(“/songs/brokernangel.mp3”);
URL song1Url=song1.toUrl()// 试试这个

InputStream input = new URL("http://www.somewebsite.com/a.txt").openStream();
我想你想要的是


它应该返回一个格式正确的jar://URL。不过我还没有亲自测试过,所以要当心,我不确定你是否真的想这么做。如果您需要特定任务的URL,请执行以下操作:

URL=this.getClass().getClassLoader().getResource(“/songs/brokernangel.mp3”)

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

  • 实现您自己的
    UrlInputStream扩展InputStream
    进入构造函数
    URL
    ,将其存储在类varible中,通过调用
    URL.openStream()
    创建输入流并对其进行包装

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

  • 试试这个

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

    请注意,这种方法要求mp3位于应用程序名为songs的子目录中。您也可以对
    /songs/brokernangel.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();
    

    不,除非读取输入流,否则不能执行此操作。但随后我在javax.media.MediaLocator的线程“main”java.lang.NullPointerException中得到一个nullpointer例外:
    Exception。(MediaLocator.java:37)在com.ymail.sanchixx.sanchixx.Interface.initComposant(Interface.java:39)在com.ymail.sanchixx.sanchixx.Interface.(Interface.java:31)在com.ymail.sanchixx.sanchixx.Main.Main(Main.java:8)
    你能用新代码更新你的帖子吗,这样我们就可以找到新的错误了?
    线程“Main”java.lang.IllegalArgumentException中的异常:URI在com.ymail.sanchixx.sanchixx.Interface.initComposant(Interface.java:49)的java.net.URI.tour(未知源代码)中不是绝对的在com.ymail.sanchixx.sanchixx.Interface.(Interface.java:33)在com.ymail.sanchixx.sanchixx.Main.Main(Main.java:8)