如何让这个bufferedReader循环继续运行?

时间:2016-01-02 02:19:02

标签: java loops boolean

我有一个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]);
    }
}

2 个答案:

答案 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);
}