2

我从 url 下载 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();

任何想法 ?

4

2 回答 2

4

在 Java 7 中,将 URL 保存到文件的最简单方法是:

try (InputStream stream = con.getInputStream()) {
    Files.copy(stream, Paths.get("test.zip"));
}
于 2013-06-05T17:17:22.280 回答
1

至于为什么你得到一个 404 - 这很难说。您应该检查 的值url,正如 greedybuddha 所说,您应该通过URI.getURL(). 但也有可能服务器正在使用用户代理检查或类似的东西来确定是否为您提供资源。您可以尝试使用cURL 之类的东西以编程方式获取,而无需自己编写任何代码。

然而,还有另一个问题迫在眉睫。这是一个 zip 文件。那是二进制数据。但是您使用InputStreamReader的是专为文本内容设计的 。不要那样做。您永远不应该将 aReader用于二进制数据。只需使用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 语句。

于 2013-06-05T14:54:49.600 回答