2012-05-20 21 views
0

我正在研究从固定网页获取信息并将信息转换为图形的应用程序。我试图收到的网页是一个txt文件。问题在于txt文件非常大,需要一分钟才能将文件转换为java中的字符串。我使用这个代码如下:在Android java中从互联网获取txt文件的一部分

HttpClient client = new DefaultHttpClient(); 
HttpGet httpGet = new HttpGet("http://winterberg.dnsalias.net:9000/log.txt"); 
ResponseHandler<String> handler = new BasicResponseHandler(); 
response = client.execute(httpGet, handler); 

txt文件代表的温度在一所房子的历史。自2011年8月11日起,每小时一行文本自动添加到文本文件中,因此它包含6000多行。但是,只有上个月的信息与应用程序相关。有没有办法从文件末尾开始读取,直到它读取了一定数量的行?

或者有另一种方法来加快阅读文件?

我无法更改文本文件。

回答

1

您可以完全读取您的文本文件并保存读取的字节数。因此,在下次调用时,您可以读取从存储它的数字开始的字节范围,并在下载此特定字节后,将其附加到原始文本文件中。并且您有用新行更新的文本文件。

您可以使用代码的一部分,遵循得到字节的范围:

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpGet get = new HttpGet(new URI(...)); 
get.addHeader("Range", "bytes=" + start + "-"); 
InputStream in = httpClient.execute(get).getEntity().getContent(); 

而对于追加的文件,你可以打开追加模式的文件,并在其上书写新的字节:

FileOutputStream fos = new FileOutputStream("file.txt", true); //true means openning file in append mode 

byte[] buffer = new byte[1024]; 
int nread = -1; 
while((nread != in.read(buffer, 0, 1024)) 
    fos.write(buffer, 0, nread); 

in.close(); 
fos.close(); 

希望你:)

+0

开始是指什么(第3行,代码的第一部分)? –

+0

在第一次运行时,你应该得到你的文本文件的所有部分,所以,你应该设置开始'0' –

+0

如果你达到你的问题答案,你应该接受正确的答案。 –

1

解决这个问题的最简单方法是具有读取文件并打印最后30行的服务器上的一个非常简单的脚本非常有用。

您也可以尝试使用范围HTTP头,但许多服务器不实现(你已经有一个例子的答案)。

sample usage: 
Range: bytes=500-999 

我认为脚本将是一个更好的选择,虽然。