是否有一种从文件中读取前n行的实用方法?

Che*_*rry 1 java string file

我搜索了以下受欢迎的库:

  • 番石榴 - Fiels.readLines
  • nio - Files.readFirstLineFiles.readAllLines
  • ApacheCommons - FileUtils.readLines

所有方法都将整个文件作为String集合读入内存.但这对于拥有数千行的大型文件没有用处?是否有一个简单的方法调用来读取n任何这些库中的文件的第一行?

Bor*_*der 7

使用 Java 8,您可以使用Files.lines

List<String> readFirst(final Path path, final int numLines) throws IOException {
    try (final Stream<String> lines = Files.lines(path)) {
        return lines.limit(numLines).collect(toList());
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Java 8 之前,您可以很容易地自己编写一些东西:

List<String> readFirst(final Path path, final int numLines) throws IOException {
    try (final BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
        final List<String> lines = new ArrayList<>(numLines);
        int lineNum = 0;
        String line;
        while ((line = reader.readLine()) != null && lineNum < numLines) {
            lines.add(line);
            lineNum++;
        }
        return lines;
    }
}
Run Code Online (Sandbox Code Playgroud)


Rei*_*eus 6

你可以用 LineNumberReader

LineNumberReader reader = 
    new LineNumberReader
      (new InputStreamReader(new FileInputStream("/path/to/file"), "UTF-8"));

try{
  String line;
  while (((line = reader.readLine()) != null) && reader.getLineNumber() <= 10) {
     ...
   }
}finally{
   reader.close()
}
Run Code Online (Sandbox Code Playgroud)