GAE:如何逐行读取URL响应?
问题描述:
在Google App Engine中,我尝试从URL读取.txt文件。由于允许的最大大小为1MB,并且文件稍大,因此我使用了描述为here的替代方法。GAE:如何逐行读取URL响应?
所以,我想要做的是这样的:
FetchOptions fo = FetchOptions.Builder.allowTruncate().doNotFollowRedirects();
HTTPRequest request = new HTTPRequest(url,HTTPMethod.GET,FetchOptions.Builder.allowTruncate());
URLFetchService service = URLFetchServiceFactory.getURLFetchService();
HTTPResponse response = service.fetch(request);
我的问题是,现在,我怎么能逐行读取该响应行?我试图处理每一行,这应该是可能的,因为源文件是一个简单的文本文件。
我可以得到一个byte []与
byte[] content = response.getContent();
,但我与它的进一步处理中挣扎。
或者,我可以做一些完全不同的事情来实现相同的目标吗?
我想逐行读取它,因为我不需要所有的行。处理将比将所有内容放在一个大字符串中容易得多。
答
你可以试试:
ByteArrayInputStream bais = new ByteArrayInputStream(content);
BufferedReader reader = new BufferedReader(new InputStreamReader(bais, "utf-8"));
String line = null;
while ((line = reader.readLine()) != null) {
...
}
或者,你可以使用IOUtils
并调用IOUtils.lineIterator(reader)
(其中阅读器是InputStreamReader
)
非常好,谢谢。我认为它必须是BufferedReader reader = new ...而不是Reader reader。超类没有readLine()方法。如果这是正确的,你能否更新你的答案?公寓从它,它完美的作品,谢谢! – pgruetter 2010-11-15 07:19:47
@ socken23是的,正确的。我正在修复它。顺便说一下,按照SO的规则,如果它适合你,你被邀请标记一个被接受的答案。 – Bozho 2010-11-15 07:38:46
感谢您纠正它,现在工作正常。 – pgruetter 2010-11-15 08:10:52