2010-11-14 82 views
2

在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(); 

,但我与它的进一步处理中挣扎。

或者,我可以做一些完全不同的事情来实现相同的目标吗?

我想逐行读取它,因为我不需要所有的行。处理将比将所有内容放在一个大字符串中容易得多。

回答

2

你可以试试:

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

+0

非常好,谢谢。我认为它必须是BufferedReader reader = new ...而不是Reader reader。超类没有readLine()方法。如果这是正确的,你能否更新你的答案?公寓从它,它完美的作品,谢谢! – pgruetter 2010-11-15 07:19:47

+0

@ socken23是的,正确的。我正在修复它。顺便说一下,按照SO的规则,如果它适合你,你被邀请标记一个被接受的答案。 – Bozho 2010-11-15 07:38:46

+0

感谢您纠正它,现在工作正常。 – pgruetter 2010-11-15 08:10:52