我从网址下载zip文件时遇到问题。 它适用于Firefox,但在我的应用程序中我有404。
这是我的代码
URL url = new URL(reportInfo.getURI().toString());
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
// Check for errors
int responseCode = con.getResponseCode();
InputStream inputStream;
if (responseCode == HttpURLConnection.HTTP_OK) {
inputStream = con.getInputStream();
} else {
inputStream = con.getErrorStream();
}
OutputStream output = new FileOutputStream("test.zip");
// Process the response
BufferedReader reader;
String line = null;
reader = new BufferedReader(new InputStreamReader(inputStream));
while ((line = reader.readLine()) != null) {
output.write(line.getBytes());
}
output.close();
inputStream.close();
有什么想法吗?
答案 0 :(得分:4)
在Java 7中,将URL保存到文件的最简单方法是:
try (InputStream stream = con.getInputStream()) {
Files.copy(stream, Paths.get("test.zip"));
}
答案 1 :(得分:1)
至于为什么你得到404 - 这很难说。您应该检查url
的值,正如greedybuddha所说,您应该通过URI.getURL()
。但是,服务器也可能正在使用用户代理检查或类似的东西来确定是否为您提供资源。您可以尝试使用类似cURL的内容来以编程方式获取,但无需自己编写任何代码。
然而,还有另一个问题迫在眉睫。这是一个zip文件。这是二进制数据。但您使用的是InputStreamReader
,专为 text 内容而设计。不要那样做。你应该从不使用Reader
来获取二进制数据。只需使用InputStream
:
byte[] buffer = new byte[8 * 1024]; // Or whatever
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) > 0) {
output.write(buffer, 0, bytesRead);
}
请注意,您应该关闭finally
块中的流,或者如果您使用的是Java 7,请使用try-with-resources语句。