2012-05-20 20 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 

我認爲腳本將是一個更好的選擇,雖然。