在Java中查找与URI对应的协议

M31*_*314 12 java url uri inputstream

我在Java中有URI对象.我想将其转换为InputStream,但转换应该依赖于协议.如果我的URI是这样的话,我可以这样做http://somepath.com/mysuperfile.xsl:

return myURI.toURL().openConnection().getInputStream();
Run Code Online (Sandbox Code Playgroud)

或者这样,如果我的uri是file:///somepath/mysuperfile.xsl:

return new FileInputStream(Paths.get(myURI).toFile());
Run Code Online (Sandbox Code Playgroud)

或者甚至是另一种方式.我可以尝试手动检查它,但Java有一些很好/正确的方法来检查它,也许使用新的java.nio.*包?

vax*_*uis 20

每个URI都定义为由四部分组成,如下所示:

[scheme name] : [hierarchical part] [[ ? query ]] [[ # fragment ]]

如果您想要的是方案名称(大致转换为协议),请使用

switch ( myURI.getScheme() ) {
  case "http":
    return myURI.toURL().openConnection().getInputStream();
  case "ftp":
    // do something   
  case "file":
    return new FileInputStream( Paths.get(myURI).toFile() );
}
Run Code Online (Sandbox Code Playgroud)

http://docs.oracle.com/javase/6/docs/api/java/net/URI.html#getScheme%28%29

或者,如果您只想生成一个InputStream 区分方案,只需使用

return myURI.toURL().openStream();
Run Code Online (Sandbox Code Playgroud)

要么

return myURI.toURL().openConnection().getInputStream();
Run Code Online (Sandbox Code Playgroud)

(正如您已经为HTTP协议/方案所做的那样)