Java BufferedReader.readLine doeasn';t从文件开头开始并跳过行

Java BufferedReader.readLine doeasn';t从文件开头开始并跳过行,java,eclipse,Java,Eclipse,我需要逐行读取一个文本文件,直到找到一个特定的字符串。我使用的是BufferedReader.readLine(),但是当我调试时,我发现它从文件中的第三行开始,然后跳过第三行。 这是我的密码: try { reader = new BufferedReader(new FileReader(path)); String line1 = null; while ((line1 = reader.readLine()) != null) { if (li

我需要逐行读取一个文本文件,直到找到一个特定的字符串。我使用的是
BufferedReader.readLine()
,但是当我调试时,我发现它从文件中的第三行开始,然后跳过第三行。 这是我的密码:

try {
    reader = new BufferedReader(new FileReader(path));

    String line1 = null;

    while ((line1 = reader.readLine()) != null) {
        if (line1.toString() == invocation0) {
            found = true;
            return false;
        } else if (line1 == invocation1) {
            found = true;
            return true;
        }
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (reader != null)
        try {
            reader.close();
        } catch (IOException e) {
        }
}
我非常感谢任何帮助,因为我尝试了许多不同的解决方案,但仍然无法解决这个问题

该文件的内容如下所示:

//============================================================================ .//文件:abc.mark .//描述:任何东西 注意:什么都可以 .// .//============================================================================ .调用RemoveClass(“属性”,0)

使用
equals()
方法进行
String
值比较

此外,您可以使用
中断
,而不是
if
中的
返回
。不过,这只是一个建议

使用
equals()
方法进行
String
值比较


此外,您可以使用
中断
,而不是
if
中的
返回
。不过这只是一个建议。

BufferedReader不应该跳过任何内容。不幸的是,正是您让read方法跳过了这一行。Equality操作符
==
不会比较任何两个字符串的内容,而是比较它们是否属于同一对象。你可以通过两种方式避免它

  • 在调用0时调用intern()(无论如何,line1对象应该在调用之前已被插入)
  • 更精确地使用equals方法line1.equals(invocaton0)

  • 这可能有助于您更好地理解它。

    BufferedReader不应该跳过任何内容。不幸的是,正是您让read方法跳过了这一行。Equality操作符
    ==
    不会比较任何两个字符串的内容,而是比较它们是否属于同一对象。你可以通过两种方式避免它

  • 在调用0时调用intern()(无论如何,line1对象应该在调用之前已被插入)
  • 更精确地使用equals方法line1.equals(invocaton0)

  • 这可能有助于您更好地理解它。

    不,BufferedReader确实不这么做。请编辑您的文章,包括一个简短但完整的程序,演示问题(有适当的缩进),一个示例文本文件,预期输出和实际输出。我注意到您正在使用
    ==
    检查字符串是否相等,这可能是真正的问题。请参阅使用.equals方法而不是==。另外,您不需要在“line1.toString()”中使用toString()方法,因为line1是一个字符串。不,BufferedReader实际上不这样做。请编辑您的文章,包括一个简短但完整的程序,演示问题(有适当的缩进),一个示例文本文件,预期输出和实际输出。我注意到您正在使用
    ==
    检查字符串是否相等,这可能是真正的问题。请参阅使用.equals方法而不是==。另外,您不需要在“line1.toString()”中使用toString()方法,因为line1是一个字符串。如果您能帮助我解决一个大问题,那就是line1=reader.readLine()的值不正确,我将不胜感激。它跳过行并从文件的中间开始。因为正如@JonSkeet提到的,
    BufferedReader
    本身不会跳过行。@MariamSherif-我刚刚尝试了您更新的文本,它只从起始行开始读取(正如它会、应该和做的那样)。关于我的环境中为什么仍然存在问题的任何建议请执行以下操作:-
    while((line1=reader.readLine())!=null){System.out.println(line1);
    并显示sysout正在打印的输出。如果您能帮我解决一个大问题,我将不胜感激不正确。它跳过行并从文件的中间开始。因为正如@JonSkeet提到的,
    BufferedReader
    本身不会跳过行。@MariamSherif-我刚刚尝试了您更新的文本,它只从起始行开始读取(正如它所做的那样,应该&做的那样)。关于我的环境中为什么仍然存在问题的任何建议请执行以下操作:-
    while((line1=reader.readLine())!=null){System.out.println(line1);
    并显示sysout正在打印的输出。我将我的代码编辑为:try{reader=new BufferedReader(new FileReader(path));字符串line1=null;while((line1=reader.readLine())!=null){System.out.println(line1);}}}catch(异常e){e.printStackTrace();}最后{如果(reader!=null)尝试{reader.close();}捕获(IOE){}打印的行与文件不一样。它仍然跳过行!!你能发布完整的代码片段,包括调用是什么意思吗?忘记调用,我现在只想逐行阅读文件,并在控制台上打印每一行,就像我在前面的评论中提到的我将代码编辑为:try{reader=new BufferedReader(new FileReader(path));字符串line1=null;while((line1=reader.readLine())!=null){System.out.println(line1);}}}catch(异常e){e.printStackTrace();}最后{if(reader!=null)试试看{reader.close();}catch(IOE异常){}打印的行与文件不一样。它仍然跳过行!!你能发布完整的代码片段,包括调用是什么意思吗?忘记调用吧,我现在只想逐行阅读文件,并在控制台上打印每一行,就像我在前面的评论中提到的那样
    if(line1.equals(invocation0))