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

Java 是否有从文件中读取前n行的实用方法?,java,string,file,Java,String,File,我搜索了以下流行的图书馆: 番石榴-Fiels.readLines nio-Files.readFirstLine或Files.readAllLines ApacheComons-FileUtils.readLines 所有方法都将整个文件作为字符串集合读入内存。但这对包含数千行的大型文件不有用吗?是否有一个简单的方法调用来读取这些库中文件的第一行?对于Java 8,您可以使用: List readFirst(最终路径,最终整数行)引发IOException{ try(最终流行=Files.

我搜索了以下流行的图书馆:

  • 番石榴-Fiels.readLines
  • nio-Files.readFirstLine或Files.readAllLines
  • ApacheComons-FileUtils.readLines
所有方法都将整个文件作为字符串集合读入内存。但这对包含数千行的大型文件不有用吗?是否有一个简单的方法调用来读取这些库中文件的第一行?

对于Java 8,您可以使用:

List readFirst(最终路径,最终整数行)引发IOException{
try(最终流行=Files.lines(路径)){
返回行.limit(numLines).collect(toList());
}
}
在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;
    }
}
List readFirst(最终路径,最终整数行)引发IOException{
try(final BufferedReader=Files.newBufferedReader(路径,StandardCharsets.UTF_8)){
最终列表行=新的ArrayList(numLines);
int lineNum=0;
弦线;
while((line=reader.readLine())!=null&&lineNum
我不知道您想要的“就绪”实用程序,但它非常简单。首先创建
BufferedReader
的实例:

BufferedReader=newBufferedReader(newFileReader(“myfile.txt”)

现在读第一行:

Stirng line = reder.readLine();
显然,您可以根据需要多次调用此方法来读取文件的n行,例如:

for (int i = 0; i < n; i++) {
    Stirng line = reder.readLine();
    // do whatever you want with the line
}
for(int i=0;i
您可以使用

LineNumberReader读取器=
新行号阅读器
(新的InputStreamReader(新文件InputStream(“/path/to/file”),“UTF-8”);
试一试{
弦线;

虽然(((line=reader.readLine())!=null)和&reader.getLineNumber()不能在我的系统上编译,但您需要在
newbuffereder
方法调用中指定一个字符集。@owlstead很好-在Java 8中有一个默认使用
UTF-8
的方法。是的,我猜得差不多:)请注意,您指定的Java 8方法也使用UTF-8作为默认字符集。这一问题的答案有点太快,代码中存在多个错误,并且忽略
reder
的结果并不是一个很好的答案。使用默认字符集也可能不是一个好主意。
LineNumberReader
-我总是忘记存在。+1可能一些番石榴或甲骨文的人正在阅读此问题并添加新方法?;)
for (int i = 0; i < n; i++) {
    Stirng line = reder.readLine();
    // do whatever you want with the line
}
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()
}