Java 通过URL查询字符串从文件读取InputStream

Java 通过URL查询字符串从文件读取InputStream,java,url,networking,junit,httpconnection,Java,Url,Networking,Junit,Httpconnection,当URL是查询字符串而不是文件的直接链接时,是否可以使用java URL.openStream()方法将文件读入输入流?例如,我的代码是: URL myURL = new URL("http://www.test.com/myFile.doc"); InputStream is = myURL.openStream(); 这适用于直接文件链接。但是如果URL被删除了呢?我仍然能够从服务器响应获取文件流吗 谢谢 URL类适用于任何URL,包括: 新URL(“http://www.exampl

当URL是查询字符串而不是文件的直接链接时,是否可以使用java URL.openStream()方法将文件读入输入流?例如,我的代码是:

URL myURL = new URL("http://www.test.com/myFile.doc");
InputStream is = myURL.openStream(); 
这适用于直接文件链接。但是如果URL被删除了呢?我仍然能够从服务器响应获取文件流吗


谢谢

URL类适用于任何URL,包括:

  • 新URL(“http://www.example.com/");
  • 新URL(“file://C/windows/system32/cmd.exe");
  • 新URL(“ftp://user:password@example.com/filename;type=i”)

由应用程序来处理数据,例如下载数据或将其视为纯文本

通常是的,它会起作用

但是请注意,
URL.openStream()
方法不遵循重定向,并且在指定一些额外的HTTP行为时不够灵活:请求类型、头等

我建议改为使用:


你为什么不试试呢?因为我现在不能试试,我想知道它是如何工作的。我知道,当存在直接链接时,我已经知道文件的位置,但当它是查询字符串时,则由服务器返回as内容的位置。我很好奇这是怎么回事。非常感谢你的回复!使用这个特定的资源,我将从查询返回一个302,其中包含位置。url.openStream()会自动解析到该位置吗?或者我必须像你那样做吗?不幸的是,正如我提到的那样,使用
url.openStream()
你需要处理3xx状态,并以某种循环方式手动执行这些重定向
HttpClients.createDefault()
默认情况下遵循重定向并执行许多有用的操作,查看官方文档它们非常友好。
final CloseableHttpClient httpclient = HttpClients.createDefault();         
final HttpGet request = new HttpGet("http://any-url");

try (CloseableHttpResponse response = httpclient.execute(request)) {
    final int status = response.getStatusLine().getStatusCode();

    if (status == 200) {
        final InputStream is = response.getEntity().getContent();
    } else {
        throw new IOException("Got " + status + " from server!");
    }
}
finally {
    request.reset();
}