我有一個文本文件。我想從一行到另一行檢索內容。 例如,該文件可能是200K行。我想讀第78行到第2735行的內容。由於文件可能非常大,我不想將整個內容讀入內存。用Java讀取文本文件
2
A
回答
0
這裏是一個可能的解決方案的開始:
public static List<String> linesFromTo(int from, int to, String fileName)
throws FileNotFoundException, IllegalArgumentException {
return linesFromTo(from, to, fileName, "UTF-8");
}
public static List<String> linesFromTo(int from, int to, String fileName, String charsetName)
throws FileNotFoundException, IllegalArgumentException {
if(from > to) {
throw new IllegalArgumentException("'from' > 'to'");
}
if(from < 1 || to < 1) {
throw new IllegalArgumentException("'from' or 'to' is negative");
}
List<String> lines = new ArrayList<String>();
Scanner scan = new Scanner(new File(fileName), charsetName);
int lineNumber = 0;
while(scan.hasNextLine() && lineNumber < to) {
lineNumber++;
String line = scan.nextLine();
if(lineNumber < from) continue;
lines.add(line);
}
if(lineNumber != to) {
throw new IllegalArgumentException(fileName+" does not have "+to+" lines");
}
return lines;
}
0
只需簡單地逐行閱讀並計算行號,並開始在您提到的行位置獲取所需的內容。
11
使用BufferedReader.readLine()並計算行數。你只會在內存中保留緩衝區大小和當前行。
不,不可能在沒有閱讀整個文件的情況下到達第3412行(除非你的行都有固定大小)。
0
我會建議使用RandomAccessFile的,這個類可以跳轉到一個特定的位置在文件中。所以,如果你想閱讀文件的最後一行,你不必閱讀所有以前的行,你可以跳轉到該行。
+1
這沒有幫助,因爲字節索引和行號之間沒有固定的關係。一條線可以像你想的那樣長或短,所以你必須讀取數據以知道何時結束。讀取最後一行可以通過這種方式得到改進(除非文件實際上包含一個巨大的行),但通常它不會有幫助。 – 2010-04-26 15:41:31
相關問題
- 1. 用metod JAVA讀取BIG文本文件
- 2. 用java讀取文本文件
- 3. 用java讀取unicode文本文件
- 4. 用Java讀取文本文件
- 5. Java - 按塊讀取文本文件
- 6. Java文本文件無法讀取
- 7. Java程序讀取文本文件
- 8. java-lotto從文本文件中讀取
- 9. Java無法讀取文本文件
- 10. FileNotFoundException - 在java中讀取文本文件
- 11. 從文本文件讀取的Java
- 12. 從文本文件中讀取(Java)
- 13. 讀取多個文本文件java
- 14. Java從文本文件中讀取
- 15. Java從文本文件中讀取值
- 16. Java - 讀取和寫入文本文件
- 17. 在java中讀取文本文件
- 18. 從文本文件Java中讀取行?
- 19. 讀取文本文件中的Java-12
- 20. 用Java腳本讀取JSON文件
- 21. 使用java讀取文件頭文件
- 22. 用XML讀取文件Java
- 23. 用java讀取tzdata文件
- 24. 用Java讀取XSD文件
- 25. 用Java讀取XML文件
- 26. 用Java讀取bin文件
- 27. 用Java讀取XML文件
- 28. 用Java讀取文件
- 29. 用Java讀取CSV文件
- 30. 用Java讀取MSI文件
用'assert'替換'// assume'並在末尾添加一個';'; – 2010-04-26 15:05:03
另外,是否有使用掃描器而不是簡單的'BufferedReader'的理由?另外:你不指定字符編碼用於從文件讀取,所以你要離開那部分運氣。 – 2010-04-26 15:06:06
@Joachim,好點,我編輯了我的答案!關於'BufferedReader',我認爲(d)這並不重要:我錯了嗎? – 2010-04-26 15:18:43