日期:2014-05-20  浏览次数:20834 次

[在线等]求助,获取文本文件行数时忽略“回车符”的问题
本帖最后由 kerafan 于 2013-08-14 10:54:20 编辑
网上找了个获取文本文件行数的代码,但是代码里面用的LineNumberReader对于回车、换行、回车换行都会认为是新的一行。现在我有个大文件,里面有1千万行,有1.5G,它的行结束符是“换行符”,但是文件内容会包括有有回车符。现在用LineNumberReader统计的话,总会多出几行来,有啥好办法?同时要注意效率,毕竟文件很大。

/**
 * 获取文件行数
 * @param fileName - 文件路径
 * @return 文件行数
 */
public static Integer getRowCount(String fileName) {
Integer rowCount = 0;

File f = new File(fileName);
long length = f.length();
LineNumberReader lnr = null;
try {
lnr = new LineNumberReader(new FileReader(f));
if (lnr != null) {
lnr.skip(length);
rowCount = lnr.getLineNumber();
lnr.close();
}
} catch (IOException e) {
if (lnr != null) {
try {
lnr.close();
} catch (IOException ee) {
}
}
}

return rowCount;
}

------解决方案--------------------
你可以用正则表达式 \r 是匹配一个回车的
------解决方案--------------------
LineNumberReader 可认为行在遇到以下符号之一时结束:换行符('\n')、回车符('\r')、回车后紧跟换行符。