我在 Java 中有 URI 对象。我想将其转换为 InputStream,但转换应取决于协议(protocol)。如果我的 URI 是 http://somepath.com/mysuperfile.xsl
,我可以这样做:
return myURI.toURL().openConnection().getInputStream();
或者如果我的 uri 是 file:///somepath/mysuperfile.xsl
:
return new FileInputStream(Paths.get(myURI).toFile());
或者甚至是其他方式。我可以尝试手动检查它,但是 Java 是否有一些好的/正确的方法来检查它,也许使用那个新的 java.nio.*
包?
最佳答案
Every URI is defined as consisting of four parts, as follows:
[scheme name] : [hierarchical part] [[ ? query ]] [[ # fragment ]]
如果你想要的是方案名称(大致翻译成协议(protocol)),只需使用
switch ( myURI.getScheme() ) {
case "http":
return myURI.toURL().openConnection().getInputStream();
case "ftp":
// do something
case "file":
return new FileInputStream( Paths.get(myURI).toFile() );
}
http://docs.oracle.com/javase/6/docs/api/java/net/URI.html#getScheme%28%29
或者,如果您只想生成一个InputStream
而不区分方案,只需使用
return myURI.toURL().openStream();
或
return myURI.toURL().openConnection().getInputStream();
(正如您已经为 HTTP 协议(protocol)/方案所做的那样)
关于java - 在Java中查找URI对应的协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430737/