【发布时间】:2011-06-13 04:50:32
【问题描述】:
我正在尝试通过 URL 上的 InputStreamReader 使用 BufferedReader 从 Web 文档中读取文本(到某些 Apache 服务器上的文件)。
String result = "";
URL url = new URL("http://someserver.domain/somefile");
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(url.openStream(), "iso-8859-1"));
result += in.readLine();
现在这工作得很好。但很明显,我希望读者不要只阅读一行,而是尽可能多地阅读文件中的内容。
查看 BufferedReader API,以下代码应该可以做到这一点:
while (in.ready()) {
result += in.readLine();
}
即当有更多行时阅读所有行,当没有更多行时停止。然而,这段代码不起作用——读者只是从不报告ready() = true!
我什至可以在读取一行之前打印 ready() 值(从文件中读取正确的字符串),但阅读器会报告“false”。
我做错了吗?为什么 BufferedReader 在实际有要读取的内容时返回“false”?
【问题讨论】:
-
我不知道它是否重要,但 URL 实际上指向使用 HTTPS 的位置。但是,证书已正确安装在服务器和运行上述代码的机器上。 readLine() 也毫无问题地返回第一行。
-
当有等待数据时它会准备好,但是直到你执行 read/readLine 才会有等待数据。即使有数据在等待,也可能不是完整的行,所以 readLine() 无论如何都会阻塞。
-
很多很好的答案,谢谢每一个。可悲的是,我只能将一个标记为已接受的答案。 :)
标签: java url bufferedreader