java - 在Java中查找URI对应的协议(protocol)

标签 java url uri inputstream

我在 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/

相关文章:

java - Spring 线程安全 session bean的最佳实践?

java - 如何在生成 wsdl 时包含常量类

php - 是否可以记住第一页的网址并将其用作返回第二页的链接 - PHP

ruby-on-rails - Net::HTTP 发送请求 xml

php - PHP文件的真实URI?

java - 在哪里创建属性文件以读取部署在 Weblogic(Linux) 上的 Web 应用程序中的值

java - 如何在Java中计算正态分布下的面积?

javascript - 从 SQL 查询派生的 URL 打开页面

ruby-on-rails - 如何在Rails的Model方法中获取对象的url_for

redirect - 如何使用 uri 将动态子域重定向到域