2011-05-18 47 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字节)可用。

相关问题