当前位置: 首页 > 知识库问答 >
问题:

Java中的BufferedReader正在跳过文件中的最后一个空行

赵永逸
2023-03-14

我有一个以下格式的文件:

姓名:John
文本:Hello
--空行--缓冲读取器正在阅读此内容
名称:Adam
文本:Hi
--空行--缓冲读取器正在跳过此行

我尝试了多种方法来读取最后一行空行,但都不起作用。有什么建议吗?我有一个程序可以验证消息的格式是否正确。正确的格式应该有三行,第一行是名称,第二行是文本,第二行是空行。由于BufferedReader没有读取最后一个空行,我的程序总是说消息的格式错误。

我正在使用的示例代码:

File file = new File(absolutePath);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
    process(line);
}

共有1个答案

韩良策
2023-03-14

代码正以应有的方式工作。最后一行(空)是文件末尾(EOF)。有效的行由回车和换行终止。因此读取了第3行。我包含了显示文本和符号的文件图像(为此使用记事本)

如果在末尾添加另一个空行,请注意前一个空行现在是如何终止的。

我稍微修改了你的代码来运行这个场景

    public static void main (String[] args) throws IOException {
        File file = new File("emptyline.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        int linenum = 1;
        while ( (line = br.readLine()) != null) {
            System.out.println("Line " + (linenum++) + ": " + line);
        }
        br.close();
    }

当我运行代码时,代码末尾有两个空行,结果如下:

Line 1: Name: John
Line 2: Text: Hello
Line 3: 
Line 4: Name: Adam
Line 5: Text: Hi
Line 6: 

如果您有基于这种结构的数据验证此文件的软件,我不知道该说什么。这似乎是验证文件的糟糕方法。有更有效的方法可以做到这一点,例如使用校验和。也许如果您尝试在末尾使用两行空行,验证器会接受它为正确的格式。

 类似资料:
  • 因此,我正在阅读一个文件,其中包含我在前面代码中写到的约会。我想在文本文件中搜索某个日期的约会并将其添加到ArrayList中,但当BufferedReader遍历它时,它会跳过其他行...这是我的代码

  • 问题内容: 我正在使用以下内容读取文件的各行, 现在,我想跳过读取文件的第一行,并且不想使用计数器行来保持行数。 这该怎么做? 问题答案: 你可以试试这个

  • 问题内容: 从CSV读取数据时,它会跳过第二行。我有两个CSV文件,一个用于用户,一个用于属性-密钥ID是user。 我与以下用户一起运行 每个奇数编号都在工作,并且检测到用户已登录,而第二个奇数编号正在跳过。我阅读了一下,但我不认为我有.nextLine()正在像此链接中那样跳过,但是我只在星期五开始使用CSV和BufferedReader! 问题答案: 它跳过第二行,因为您在每次迭代中都读取两

  • 我使用下面的读取文件的行, 现在,我想跳过读取文件的第一行,我不想使用计数器行来记录行数。 这要怎么做?

  • 我正在编写一个程序,并且正在创建一个名为的方法,它将调用来读取文件中的每个字符。该方法必须跳过空格、制表符和换行符,还必须识别和跳过所有注释,无论它们以或开头,直到具有匹配的或的注释结束。 我已经编写了以下将使用的: 我也不确定这个方法是否完全正确,但我基本上尝试返回下一个可用字符,如果行在末尾,它将返回'\n' 如果你能帮助我写出这个方法,我将不胜感激。

  • 问题内容: 码: 输出: 剩余10秒剩余 8秒剩余 6秒剩余 4秒剩余 完成! 问题: 如何显示“ 剩余2秒 ”?经过的时间确实是10秒,但是最后一个onTick()永远不会发生。如果我将第二个参数从2000更改为1000,则输出为: 剩余10秒剩余 9秒剩余 8秒剩余 7秒剩余 6秒剩余 5秒剩余 4秒剩余 3秒剩余 2秒剩余 完成! 如此看来,似乎跳过了最后一个onTick()调用。顺便说一句