我有問題可以從url中讀取最後n行。怎麼做 ?我有url.openstream,但沒有爲RandomAccessFile輸入流的contrsuctor。有人能幫助我嗎?有沒有meybe已經爲此庫。 (當我有文件時,我知道如何用RandomAccess實現,但如何將流更改爲文件)。從url流問題中讀取最後n行
0
A
回答
2
- 按照慣例打開URL流。
- 將返回的InputStream包裝在
BufferedReader
中,以便您可以逐行讀取它。 - 維護一個
LinkedList
,您將保存行。 - 從BufferedReader讀取每行後:
- 將行添加到列表中。
- 如果列表的大小大於「
n
」,則請致電LinkedList#removeFirst()
。
- 一旦讀取了流中的所有行,列表將包含最後一行「
n
」行。
例如(未經測試,只是爲了示範):
BufferedReader in = new BufferedReader(url.openStream());
LinkedList<String> lines = new LinkedList<String>();
String line = null;
while ((line = in.readLine()) != null) {
lines.add(line);
if (lines.size() > nLines) {
lines.removeFirst();
}
}
// Now "lines" has the last "n" lines of the stream.
2
對不起。你將不得不自己做這個。但不要擔心,因爲它非常簡單。
您只需要跟蹤自從您開始從UrlStream
讀取以來遇到的最後一行n
行。我可以建議使用Queue
?
基本上你可以做類似
public String[] readLastNLines(final URL url, final int n) throws IOException{
final Queue<String> q = new LinkedList<String>();
final BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String line=null;
while ((line = br.readLine())!=null)
{
q.add(line);
if (q.size()>n) q.remove();
}
return q.toArray(new String[q.size()]);
}
readLastNLines
返回包含最後n
線從url
讀取陣列。
不幸的是,你不能用一個流從互聯網上使用RandomAccessFile
因爲流是,通過定義,而不是隨機訪問。
相關問題
- 1. 從文件中讀取最後N行
- 2. 如何從文件中讀取最後n行C
- 3. C - 從最後一行讀取文件問題
- 4. 從流式讀取器中刪除最後的x行
- 5. 從varbinary中讀取STGeomCollFromWKB問題(最大)
- 6. 從文本中讀取最後2行
- 7. 從文件中讀取最後一行
- 8. 在Java中從控制檯讀取多行,最後一行出現問題
- 9. 從URL讀取時遇到問題(Android)
- 10. 與尾源SpringXD流讀取所有文件只是最後N行
- 11. 從Android中的文件讀取然後讀取的問題
- 12. 閱讀最後* n *來自GZIPInputStream的行
- 13. 閱讀logcat的最後N行?
- 14. 寫入和讀取流中的問題
- 15. 從MySQL中選擇最後N行 - codeigniter
- 16. mysql從最後n行中選擇
- 17. 'getline'後從文件中讀取第一行的問題
- 18. 流讀問題
- 19. 如何獲取子進程stderr流輸出的最後N行?
- 20. Python從文件中讀取URL只會獲取最後一個URL
- 21. 從TCP流讀取多行
- 22. Java:讀取HUGE文件的最後n行
- 23. 爲最後n行
- 24. 讀取文件的\ n,而是忽略最後\ n
- 25. 查詢獲取排除最後一行的最後n行
- 26. 如何從URL行讀取?
- 27. 問題後刪除#從URL
- 28. 如何從無限Popen.stdout對象中獲取最後N行
- 29. 流>>最後一行讀兩次
- 30. Sscanf問題和從命令行讀取
問題是我在android中讀到這個,它是可以是大小爲100 MB ++的日誌文件。我以爲不讀所有文件。 – Damir
@Damir,如果你擁有的只是一個URL流,那麼服務器發送文件結束的唯一方式就是你已經使用了以前的所有內容。也許你應該考慮做一些字節範圍請求,而不是請求整個日誌(但與簡單閱讀所有內容相比,這將是相當複雜的)。 –
實現帶給你最後N行文件的servlet。從你的Android應用程序調用serlvlet。 – AlexR