2011-12-01 18 views
1

我想下載一個使用Java應用程序的vcalendar,但我無法從特定鏈接下載。下載文件programaticaly

我的代碼是:

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)。有些東西不允許我下載,我不知道爲什麼,當我嘗試使用瀏覽器時,它的工作原理...

任何人都可以幫我嗎?

+0

該文件被移動。嘗試從uri.openConnection()檢查URLConnection() – Jayan

回答

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(); 
+0

我可以更改網址,但項目應該作爲Web服務工作。當有人把這樣的鏈接鏈接到vcalendar時,我的web服務將無法正常工作。 –

+0

我檢查了這個例子(http://docs.oracle.com/javase/1.5.0/docs/guide/deployment/deployment-guide/upgrade-guide/article-17.html),它的工作原理。非常感謝 –

+0

無後顧之憂。學到了新的東西:) – speedRS

0

您應該檢查該鏈接實際提供的內容。例如,它可能是一個已移動的頁面,這會返回一個HTTP 301代碼。您的瀏覽器將自動知道要從新網址獲取它,但您的程序不會。

例如,當您執行瀏覽器請求時,您可能想要嘗試例如wireshark來嗅探實際流量。

0

我覺得還有一個重定向。瀏覽器從ssl下載安全https://codebits.eu/s/calendar.ics。嘗試使用HttpURLConnection,它應該遵循自動重定向:

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