0

我正在开发一个从固定网页获取信息并将信息转换为图形的应用程序。我试图接收的网页是一个 txt 文件。问题是txt文件太大,在java中将文件变成String需要一分钟多的时间。我为此使用的代码如下:

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 行。但是,只有上个月的信息与申请相关。有没有办法从文件末尾开始读取,直到它读取了一定数量的行?

还是有另一种方法可以加快读取文件的速度?

我无法更改文本文件。

4

2 回答 2

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

希望它对你有用:)

于 2012-05-20T17:45:48.483 回答
1

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

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

sample usage:  
Range: bytes=500-999

我认为脚本会是一个更好的选择。

于 2012-05-20T17:54:51.687 回答