Java BufferedReader - 空行问题

标签 java file javafx line bufferedreader

问题描述:例如我们有一个文本文件file.txt,内容如下:

Hello(LS)
what(LS)
are(LS)
<empty_line>(LS)
you(LS)
doing(LS)
<empty_line>(LS)
<empty_line>(LS)
now(LS)
<empty_line>(LS)
<empty_line>(LS)
<empty_line>(EOF)

(LS - 行分隔符,EOF - 文件结尾)

如果我理解文本文件的概念,那么文件看起来就像那样。现在,我想用这个文本填充例如 TextArea(来自 JavaFX)。我可以使用以下用 try-catch 包围的代码(close() 方法将在 finnaly block 中):

TextArea textArea = new TextArea();
BufferedReader br = new BufferedReader(new FileReader(new File("file.txt")));
String line;
while ((line = br.readLine()) != null) {
       textArea.appendText(line);
       textArea.appendText("\n");
}

该代码有一个大问题 - 每当文本文件不以 empty_line 结尾时,目标 TextArea 中就会多一行。当 empty_line 包含在 EOF 之前的文件时,加载到 TextArea 是正确的。我尝试了很多方法,但每次都会出现一些问题。

我为什么选择 BufferedReader? 我选择 BufferedReader 是因为我只想要一些可以逐行读取源文本文件的阅读器。我想要那个阅读器,因为文件分隔符和操作系统独立性。

我对它有什么期望? 我正在等待我逐行读取文件,当我阅读时,我设置了自定义分隔符(独立于源文件行分隔符) - 例如 LF(“\n”)。我正在等待可能有不同行分隔符的完全相同的内容!当我写入某个文件时(我也在使用 BufferedReader 的地方)(实习生从 TextArea 读取文本并根据用户操作系统设置行分隔符(System.getProperty("line.separator"))) 有类似的行为。

我尝试了什么? 我尝试了很多方法如何做到这一点。我还尝试在类 BufferedReader 中使用方法 read() 并将它的返回值与 -1 进行比较,这意味着 EOF。但是,有一个问题,我想使用自定义文件分隔符,但我没有时间编写一些解析器。

我的问题:如何使用自定义行分隔符将文件内容写入 TextArea(或任何字符串),而无需任何额外或更少的行?

*如你所见,我的英语不是很好,所以我希望你能理解我,谢谢。

最佳答案

您正在自己添加换行符。

while ((line = br.readLine()) != null) {
       textArea.appendText(line);
       textArea.appendText("\n");
}

while 循环中的第二行添加了下一行。每次执行该语句时,光标将转到下一行。 因此,当文件游标从文件中读取最后一行时,它会将其附加到 textArea,然后再附加一个换行符。这就是为什么你在最后得到额外的空白行。

if((line = br.readLine()) != null)
     textArea.appendText(line);
while ((line = br.readLine()) != null) {
       textArea.appendText("\n");
       textArea.appendText(line);
}

关于Java BufferedReader - 空行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744566/

相关文章:

java - 为什么final变量没有内部类就返回?

java - 如何在 Java 中本地保存文件(截图)?

C++ GDI+ 从文件中加载图像,然后在*卸载图像之前删除文件

矩形上的 JavaFx KeyEvent 不起作用

java - 如何在JavaFX自定义进度条中添加发光效果

java - 获得两组点之间最近对的最佳组合

java - 为什么列表只添加某些数字?

javafx - 自动编号表行(javafx)

java - 为什么在 Spring 4.3 中不推荐使用 Velocity 支持?

c - 调用 lseek64 后从文件中读取 - Linux