2011-05-18 103 views
0

我想使用java中的Apache POI從URL中讀取excel文件。我用這樣的代碼:使用POI從URL中讀取excel文件

String urlStr = "<url>"; 
URL url = new URL(urlStr); 
URLConnection uc = url.openConnection(); 
HSSFWorkbook wb = new HSSFWorkbook(uc.getInputStream()) 

這是給我的異常:java.io.IOException: Unable to read entire header; 0 bytes read; expected 512 bytes 任何想法,爲什麼發生這種情況?我在將URL轉換爲流時做錯了什麼?

我已經將excel下載到本地磁盤,並使用FileInputStream創建POI對象,它工作正常。因此我認爲excel沒有問題。閱讀URL流的代碼應該有些問題。

+0

我不確定,但我懷疑'url.openConnection()'調用可能會延遲,這意味着它可能需要一段時間,直到你得到任何數據返回到輸入流。 – posdef 2011-05-18 07:39:53

+0

在這種情況下,我試着睡一段時間的線程,但我仍然得到相同的錯誤:( – Anoop 2011-05-18 08:24:11

+0

我不知道這就是你想做的反正...應該有一個方法來檢查連接是否建立了,我一直在閱讀API,但在第一次轉換時找不到任何東西,試着在'BufferedInputStream'中包裝'InputStream'可能會有所幫助 – posdef 2011-05-18 08:34:51

回答

0

嘗試使用Google搜索無法讀取整個標題; 0字節讀取;預期的512字節

大量的點擊提到POI,特別提到了一些關於閱讀較舊的Excel(95)文件的內容。試圖通過網址打開一個不同的文件?

1

您應該轉移到更新版本的POI。較舊版本的POI對輸入流緩衝更敏感。我相信在3.7之後應該完全修復。

如果可以,請轉到POI 3.8 beta 2或3.7 Final。你可能會發現3.2的改進超過2.5,但它們都是非常舊的版本,所以我不能確定。

如果你必須堅持一個非常舊的版本,你需要做一些緩衝自己。在調用POI之前,確保至少有前4個塊(2048字節)可用。

相關問題