Java 中的 BufferedReader 正在跳过文件中的最后一个空行
BufferedReader in Java is skipping the last empty line in file
我有一个格式如下的文件:
姓名:约翰
文字:你好
--空行-- Buffered Reader is reading this.
姓名:亚当
文本:嗨
--empty line-- Buffered Reader 跳过这一行。
我尝试了多种方法来读取最后一个空行,但它不起作用。有什么建议么?
我有一个程序可以验证消息的格式是否正确。
对于正确的格式,首先应该有三行名称,然后是文本和空行。
由于 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);
}
代码按预期方式工作。最后(空)行是文件结尾 (EOF)。有效行以回车 return 和换行结束。因此读取第 3 行。我附上了一张显示文本和符号的文件图片(为此使用了 Notepad++)
如果我在末尾添加另一个空行,请注意前一个空行现在是如何终止的。
我稍微修改了你的代码以运行这个场景
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:
如果您有软件可以根据以这种方式构建的数据验证此文件,我不知道该说些什么。这似乎是验证文件的糟糕方法。有更有效的方法可以做到这一点,比如使用校验和。也许如果你在末尾尝试两个空行,验证器将接受它作为正确的格式。
我有一个格式如下的文件:
姓名:约翰
文字:你好
--空行-- Buffered Reader is reading this.
姓名:亚当
文本:嗨
--empty line-- Buffered Reader 跳过这一行。
我尝试了多种方法来读取最后一个空行,但它不起作用。有什么建议么? 我有一个程序可以验证消息的格式是否正确。 对于正确的格式,首先应该有三行名称,然后是文本和空行。 由于 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);
}
代码按预期方式工作。最后(空)行是文件结尾 (EOF)。有效行以回车 return 和换行结束。因此读取第 3 行。我附上了一张显示文本和符号的文件图片(为此使用了 Notepad++)
如果我在末尾添加另一个空行,请注意前一个空行现在是如何终止的。
我稍微修改了你的代码以运行这个场景
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:
如果您有软件可以根据以这种方式构建的数据验证此文件,我不知道该说些什么。这似乎是验证文件的糟糕方法。有更有效的方法可以做到这一点,比如使用校验和。也许如果你在末尾尝试两个空行,验证器将接受它作为正确的格式。