0

私は、固定されたWebページから情報を取得し、その情報をグラフに変換するアプリケーションに取り組んでいます。私が受信しようとしているWebページはtxtファイルです。問題は、txtファイルが非常に大きいため、ファイルをJavaの文字列に変換するのに1分以上かかることです。これに使用しているコードは次のとおりです。

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日以降、1時間ごとに1行のテキストがテキストファイルに自動的に追加されるため、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 行を出力する非常に単純なスクリプトをサーバーに置くことです。

range HTTP ヘッダーの使用を試すこともできますが、多くのサーバーはそれを実装していません (例による別の回答が既にあります)。

sample usage:  
Range: bytes=500-999

ただし、スクリプトの方が適していると思います。

于 2012-05-20T17:54:51.687 に答える