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. 如何根據固定大小拆分PL/SQL中的文件
- 4. 我們可以根據數據庫中的字符數組大小來決定字段的寬度嗎?
- 5. 如何根據文件大小顯示KB,MB或GB文件夾的大小?
- 6. 如何根據屏幕大小更改字體大小
- 7. 如何根據div大小縮放字體大小?
- 8. R:根據數據框中的大小寫分割字符
- 9. 如何打破json字符串根據頁面大小?
- 10. 如何根據大小寫拆分字符串?
- 11. 如何根據字體大小限制textarea中的字母數?
- 12. 如何根據數字字符串提取文件名?
- 13. 如何根據輸入數量定義數組大小?
- 14. java - 如何根據字符串做出決定
- 15. 根據WP7文本大小
- 16. 根據窗口大小製作圖片和文字大小
- 17. flash:根據單詞的大小更改文字大小?
- 18. 根據文字大小調整圖像大小
- 19. 根據Winforms/C中的文本和字體大小確定標籤大小#
- 20. 如何根據Apache Camel中的大小路由文件
- 21. Log4j 1.2.17 - 如何根據文件大小執行日誌滾動
- 22. 如何根據大小拆分ORC文件?
- 23. 如何在iPhone中根據它調整自定義按鈕的大小文字
- 24. 根據字符串長度更改UILabel中的字體大小
- 25. 根據字符串長度調整字體大小
- 26. 如何處理大小如10G的大型數據文件?
- 27. 如何根據包含的文本字符串的長度來調整tetxblock控件的字體大小?
- 28. 如何根據父級的大小來佈置小部件?
- 29. 如何刪除文件大小小於某個特定大小的文件夾中的所有文件(字節)
- 30. 根據可打印區域和字符數/行數計算字體大小
你需要知道的問題,甚至任何意義的字符編碼。 *你知道編碼嗎? – 2011-12-21 13:27:36
文件大小本身? 'new RandomAccessFile(...)。getChannel()。size()'? – fge 2011-12-21 13:31:50
@fge,如果沒有多字節字符,這沒問題。 – 2011-12-21 13:58:22