簡體   English   中英

我如何跳到特定行並在Java中從中讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM