来自URL的InputStream

如何从URL获取InputStream?

例如,我想通过URL wwww.somewebsite.com/a.txt获取该文件,并通过一个servlet将其作为Java中的InputStream读取。

我试过了

 InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt"); 

但是我得到的是一个错误:

 java.io.FileNotFoundException 

使用java.net.URL#openStream()和正确的URL(包括协议!)。 例如

 InputStream input = new URL("http://www.somewebsite.com/a.txt").openStream(); // ... 

也可以看看:

  • 使用java.net.URLConnection来触发和处理HTTP请求

尝试:

 final InputStream is = new URL("http://wwww.somewebsite.com/a.txt").openStream(); 

(a) wwww.somewebsite.com/a.txt不是“文件URL”。 它实际上不是一个URL。 如果你把http://放在它的前面,它将是一个HTTP URL,这显然是你想要的。

(b) FileInputStream用于文件,而不是URL。

(c)从任何 URL获得inputstream的方法是通过URL.getConnection().getInputStream(),或者URL.getConnection().getInputStream(),这是等价的,但是你可能有其他的理由来获得URLConnection并且首先使用它。

您的原始代码使用FileInputStream,它用于访问文件系统托pipe的文件。

您使用的构造函数将尝试在当前工作目录的www.somewebsite.com子文件夹(系统属性user.dir的值)中find名为a.txt的文件。 您提供的名称使用File类parsing为文件。

URL对象是解决这个问题的通用方法。 您可以使用URL访问本地文件,也可以使用networking托pipe资源。 除了http://或https://之外,URL类还支持file://协议,所以你很好。