Mne*_*nth 106
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
int lines = 0;
while (reader.readLine() != null) lines++;
reader.close();
Run Code Online (Sandbox Code Playgroud)
更新:为了回答这里提出的性能问题,我做了一个测量.第一件事:20.000行太少,以使程序运行一段时间.我创建了一个包含500万行的文本文件.这个解决方案(从没有像-server或-XX-options这样的参数的java开始)在我的盒子上需要大约11秒.与wc -l(UNIX命令行工具计数行)相同,为11秒.读取每个字符并寻找'\n'的解决方案需要104秒,9-10倍.
Aug*_*tin 55
Files.linesJava的8+具有使用一个很不错的一小段路NIO使用Files.lines.
Path path = Paths.get("./big_file.txt");
long lineCount = Files.lines(path).count();
Run Code Online (Sandbox Code Playgroud)
UTF-8中的默认字符编码.您可以指定备用编码以匹配您的特定数据文件.
Nar*_*yan 32
就像是
public static int countLines(File aFile) throws IOException {
LineNumberReader reader = null;
try {
reader = new LineNumberReader(new FileReader(aFile));
while ((reader.readLine()) != null);
return reader.getLineNumber();
} catch (Exception ex) {
return -1;
} finally {
if(reader != null)
reader.close();
}
}
Run Code Online (Sandbox Code Playgroud)
bri*_*rig 10
我找到了一些解决方案,它可能对你有用
下面是代码片段,计算文件中的no.of行.
File file = new File("/mnt/sdcard/abc.txt");
LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(file));
lineNumberReader.skip(Long.MAX_VALUE);
int lines = lineNumberReader.getLineNumber();
lineNumberReader.close();
Run Code Online (Sandbox Code Playgroud)
这大约是它能达到的最高效率,缓冲二进制读取,没有字符串转换,
FileInputStream stream = new FileInputStream("/tmp/test.txt");
byte[] buffer = new byte[8192];
int count = 0;
int n;
while ((n = stream.read(buffer)) > 0) {
for (int i = 0; i < n; i++) {
if (buffer[i] == '\n') count++;
}
}
stream.close();
System.out.println("Number of lines: " + count);
Run Code Online (Sandbox Code Playgroud)
您需要精确的行数还是只需要近似值?我碰巧并行处理大文件,并且通常不需要知道确切的行数 - 然后我恢复采样。将文件分成 10 个 1MB 的块,计算每个块中的行数,然后将其乘以 10,您将得到行数的相当好的近似值。
| 归档时间: |
|
| 查看次数: |
219121 次 |
| 最近记录: |