我有一个BufferedReader循环,用于检查下一行!= null,如果该行上有文本,读者将读取该行,现在我已成功完成此操作, 它读取该行然后它不会读取下一个因为它已经认为是if循环,我该怎么做才能使它继续读取行直到没有更多行读取?我可以使用while循环,但我有点困惑,把它放在哪里。
int numberOfLines = 0;
String[] textData = new String[numberOfLines];
if (red.readLine() != null) {
numberOfLines++;
int i;
for (i = 0; i < numberOfLines; i++) {
textData[i] = red.readLine();
//System.out.println(textData[i]);
textArea.append("\n"); //Break line after every read line
textArea.append(textData[i]);
}
}
答案 0 :(得分:0)
你有:
int numberOfLines = 0;
String[] textData = new String[numberOfLines];
所以你的数组大小为零。 稍后再说:
numberOfLines++;
不会增长数组。实际上,你无法成长数组。 您需要一个可以增长的数据结构(如ArrayList)。
另请参阅How to read from files with Files.lines(...).forEach(...)?。
答案 1 :(得分:0)
使用while
循环。由于Java数组是固定长度的,因此您需要将元素复制到新扩展的数组中。此外,请使用System.lineSeparator()
(并非每个系统都使用\n
)。像,
String[] textData = new String[0];
String line;
int i = 0;
while ((line = red.readLine()) != null) {
String[] dest = new String[textData.length + 1];
System.arraycopy(textData, 0, dest, 0, textData.length);
dest[i++] = line;
textData = dest;
textArea.append(System.lineSeparator() + line);
}
或者,您可以阅读Collection
(例如ArrayList
)。像,
List<String> textData = new ArrayList<>();
String line;
while ((line = red.readLine()) != null) {
textData.add(line);
textArea.append(System.lineSeparator() + line);
}