以编程方式下载文件

时间:2011-12-01 00:44:20

标签: java url inputstream

我正在尝试使用java应用程序下载vcalendar,但我无法从特定链接下载。

我的代码是:

URL uri = new URL("http://codebits.eu/s/calendar.ics");
InputStream in = uri.openStream();

int r = in.read();
while(r != -1) {
    System.out.print((char)r);
    r = in.read();
}

当我尝试从其他链接下载时(例如:http://www.mysportscal.com/Files_iCal_CSV/iCal_AUTO_2011/f1_2011.ics)。有些东西不允许我下载,我无法弄清楚为什么,当我尝试使用浏览器时,它可以工作。

3 个答案:

答案 0 :(得分:1)

我会遵循此example。基本上,获取连接的响应代码。如果它是重定向(例如在这种情况下为301),则检索标头位置并尝试使用该位置访问该文件。

简单示例:

URL uri = new URL("http://codebits.eu/s/calendar.ics");
HttpURLConnection con = (HttpURLConnection)uri.openConnection();
System.out.println(con.getResponseCode());
System.out.println(con.getHeaderField("Location"));

uri = new URL(con.getHeaderField("Location"));
con = (HttpURLConnection)uri.openConnection();
InputStream in = con.getInputStream();

答案 1 :(得分:0)

您应该检查该链接实际提供的内容。例如,它可能是一个已移动的页面,它为您提供了一个HTTP 301代码。您的浏览器会自动知道从新网址获取,但您的程序不会。

例如,您可能需要尝试wireshark在您执行浏览器请求时嗅探实际流量。

答案 2 :(得分:0)

我也认为有重定向。浏览器从ssl secure https://codebits.eu/s/calendar.ics下载。尝试使用HttpURLConnection,它应该自动跟踪重定向:

HttpURLConnection con = (HttpURLConnection)uri.openConnection();
InputStream in = con.getInputStream();