2012-05-20 2 views
0

Я работаю над приложением, которое получает информацию с фиксированной веб-страницы и преобразует информацию в график. Веб-страница, которую я пытаюсь получить, - это txt-файл. Проблема в том, что txt-файл настолько велик, что требуется больше минуты, чтобы получить файл в String в java. Код, который я использую для этого, выглядит следующим образом:Получение части txt-файла из Интернета в android java

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-файл представляет собой историю температур в доме. Каждый час одна строка текста автоматически добавляется в текстовый файл, начиная с 11 августа 2011 года, поэтому содержит более 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 

Я думаю, что сценарий будет лучшим вариантом.

Смежные вопросы