方式1 : 利用LineNumberReader
public static int getFileLineNum(String filePath) {
try (LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(filePath))){
lineNumberReader.skip(Long.MAX_VALUE);
int lineNumber = lineNumberReader.getLineNumber();
return lineNumber + 1;//实际上是读取换行符数量 , 所以需要+1
} catch (IOException e) {
return -1;
}
}
方式2 : Java8新的工具方法
public static long getFileLineNum(String filePath) {
try {
return Files.lines(Paths.get(filePath)).count();
} catch (IOException e) {
return -1;
}
}
Java8的新方法时间没有LineNumberReader快
如果文件大小超过了Long.MAX_VALUE,LineNumberReader会不准确
文件大小(行数) | LineNumberReader耗时 | Java8方法耗时 |
---|---|---|
9656204 | 1098 ms | 1385 ms |
29691684 | 1512 ms | 2237 ms |