Java BufferedReader不会读取文本文件中的所有行

Java BufferedReader不会读取文本文件中的所有行,java,Java,我有一个功能 public ArrayList<String> readRules(String src) { try (BufferedReader br = new BufferedReader(new FileReader(src))) { String sCurrentLine; while ((sCurrentLine = br.readLine()) != null) { System.out.println

我有一个功能

public ArrayList<String> readRules(String src) {
    try (BufferedReader br = new BufferedReader(new FileReader(src))) {
        String sCurrentLine;
        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);
            lines.add(sCurrentLine);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return lines;
}
public ArrayList readRules(String src){
try(BufferedReader br=new BufferedReader(new FileReader(src))){
弦电流线;
而((sCurrentLine=br.readLine())!=null){
System.out.println(sCurrentLine);
行。添加(sCurrentLine);
}
}捕获(IOE异常){
e、 printStackTrace();
}
回流线;
}
我的文件有26.400行,但这个函数只读取文件末尾的3400行。 如何读取文件中的所有行。 谢谢

您可能有一个空行或一个被视为
null
的行

试一试

编辑:或者,在文本文件中,当一行太长时,编辑器会自动将一行包装为多行。当您不使用返回键时,BufferedReader将其视为一行


是一个很好的工具,可以防止将单行与多行混淆。它根据返回键的用法对行进行编号。也许您可以将输入文件复制/粘贴到记事本+++,并检查行号是否匹配。

为什么不使用实用程序方法
Files.readAllLines()
(从Java 7开始提供)

此方法确保在读取所有字节或引发IOException(或其他运行时异常)时关闭文件

使用指定的字符集将文件中的字节解码为字符

public ArrayList<String> readRules(String src) {
    return Files.readAllLines(src, Charset.defaultCharset());
}
public ArrayList readRules(String src){
返回Files.readAllLines(src,Charset.defaultCharset());
}

既然您使用Java 7,为什么不改用
Files.readAllLines()
?即使不这样做,也应该使用
路径
文件.newbufferedeader()
在哪里定义
?否则这将读取一个文件的所有行,如果有问题,我将查找其他位置。了解
readLine()
method读取一行文本。换行符('\n')、回车符('\r')或紧接着换行符的回车符中的任何一个都会将行视为终止。您是否可以在此处发布第3400行和第3401行?如果有任何特殊字符,请确保高亮显示。他所做的是正确的,BufferedReader.readLine()仅在到达流的结尾时才返回null。检查一下。空行将被检索为空字符串(
),该字符串不为
null
。哪一行会被“视为
null
”?谢谢,我还不知道have readAllLines()。您的注释非常有用。您应该将
路径
对象作为参数传递给
readAllLines()
。不支持字符串。
while(br.hasNextLine())
{
    String current = br.nextLine();
}
public ArrayList<String> readRules(String src) {
    return Files.readAllLines(src, Charset.defaultCharset());
}