[英]How can I jump to specific line and read from that in java
我遇到一個大文件(很大GB),我想直接跳到特定行,然后從中讀取一些行...
例如,我喜歡
1.aaaaaaaaaaaa
2.bbbbbbbbbbbb
3.cccccccccccc
4.dddddddddddd
並且想要讀取3和4中的行。現在不使用'readLine()'處理1 .... 2行,而是將我的旅程盯着3並讀取2行。
如何在Java中做到這一點? ....因為我不想在內存中放太多對象...
感謝你!
文件中的新行只是一個字符。 在Java,C和任何其他語言中都是相同的,您必須使用readLine()
或類似的方法來計算行數。 即使有一個庫可以幫您完成,它仍然必須逐個字符地計算行數。
您不必在每次調用時都存儲readLine()
返回的值,只需檢查它是否以所需的值開頭即可。 如果是這樣,則可以存儲所需的行。
如果知道要跳轉的偏移量(不僅是行號),則可以使用RandomAccessFile和skip方法。 在您的情況下,如果您的線實際上完全相等,則可以計算偏移量和跳躍數。
否則,如果您僅基於行號進行跳轉,則必須使用BufferedReader或FilterReader逐行讀取所有文件,或者通過緩沖巨大的char標簽並自己計算行數來隨意讀取所有文件,並且開始只考慮所需的數據部分。
對於海量數據的另一個不錯的選擇是數據庫...
問候,斯特凡
不要使用readline()
,因為它將分配無用的String
。 在BufferedReader
上調用read()
,計算'\\n'
的數量,直到跳過所需的行數。
編輯 :
您可能還必須立即計數`\\r'
和'\\r'
,后跟一個'\\n'
來做與readline()
完全相同的操作。 當您讀最后一個'\\r'
時,可能會遇到一個小問題,因為您不知道它后面是否跟有'\\n'
。 為了處理這種情況,我將讀取下一個字符,如果它不是'\\n'
,我將在第一個重要行的前面使用它。
如果您的行的大小是固定的(如您的示例中所示),則另一種解決方案是計算要跳過的字符數,並使用BufferedReader.skip()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.