2
A
回答
1
要獲得字符數,您必須閱讀該文件。通過指定正確的文件編碼,可以確保Java正確讀取文件中的每個字符。
BufferedReader.read()返回讀取的Unicode字符(作爲int,範圍爲0到65535)。所以,簡單的方法來做到這一點會是這樣:
int countCharsSimple(File f, String charsetName) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f), charsetName));
int charCount = 0;
while(reader.read() > -1) {
charCount++;
}
reader.close();
return charCount;
}
您將使用Reader.read(char[])獲得更快的性能:
int countCharsBuffer(File f, String charsetName) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f), charsetName));
int charCount = 0;
char[] cbuf = new char[1024];
int read = 0;
while((read = reader.read(cbuf)) > -1) {
charCount += read;
}
reader.close();
return charCount;
}
爲了興趣,我爲基準這兩個和NIO版本安德烈的回答建議。我發現上面的第二個例子(countCharsBuffer)是最快的。
(請注意,所有這些例子包括在他們的數行分隔符。)
+0
@thanks sudocode,編寫了類似的代碼。但我很懷疑,所以想檢查其他選項。你的評論確實有幫助。 – Sach 2011-12-22 10:45:13
2
毫無疑問,讓你有正確的編碼讀取它的字符的確切數目。 問題是如何高效地讀取文件。 Java NIO是已知最快的方法。 (對我來說
FileChannel fChannel = new FileInputStream(f).getChannel();
byte[] barray = new byte[(int) f.length()];
ByteBuffer bb = ByteBuffer.wrap(barray);
fChannel.read(bb);
然後
String str = new String(barray, charsetName);
str.length();
讀入字節的緩衝區與速度附近做最大可用它就像60 MB /秒,而磁盤速度測試爲約70-75 MB /秒)
相關問題
- 1. 如何根據文字大小增加cardView大小?
- 2. 如何根據屏幕大小調整.swf文件的大小?
- 3. 根據文本字體大小更改控件大小
- 4. 如何根據固定大小拆分PL/SQL中的文件
- 5. 我們可以根據數據庫中的字符數組大小來決定字段的寬度嗎?
- 6. 如何根據文件大小顯示KB,MB或GB文件夾的大小?
- 7. 如何根據文件大小保持滾動日誌文件?
- 8. 檢查字符串的大小,並根據大小,操縱它?
- 9. 如何根據div大小按比例調整字體大小
- 10. 如何根據div大小縮放字體大小?
- 11. 如何根據屏幕大小更改字體大小
- 12. 如何打破json字符串根據頁面大小?
- 13. 如何根據大小寫拆分字符串?
- 14. 如何根據字體大小限制textarea中的字母數?
- 15. R:根據數據框中的大小寫分割字符
- 16. 如何根據數字字符串提取文件名?
- 17. 如何根據文本大小設置QLabel大小?
- 18. 如何根據標籤大小調整文本大小?
- 19. 如何根據瀏覽器大小設置文本大小?
- 20. java - 如何根據字符串做出決定
- 21. 如何根據輸入數量定義數組大小?
- 22. 決定音樂文件大小
- 23. 根據WP7文本大小
- 24. 如何使數組大小取決於文本文件的大小?
- 25. flash:根據單詞的大小更改文字大小?
- 26. 根據文字大小調整圖像大小
- 27. 根據Winforms/C中的文本和字體大小確定標籤大小#
- 28. 根據字符數量的jQuery + css大小寫引號
- 29. 根據文件大小動態分配大小爲陣列 - C
- 30. 如何根據大小拆分ORC文件?
你需要知道的問題,甚至任何意義的字符編碼。 *你知道編碼嗎? – 2011-12-21 13:27:36
文件大小本身? 'new RandomAccessFile(...)。getChannel()。size()'? – fge 2011-12-21 13:31:50
@fge,如果沒有多字節字符,這沒問題。 – 2011-12-21 13:58:22