使用 BufferedReader 在 Java 中读取单行

3

我已经成功地编写了从CSV文件中读取数据的代码。然而,当我试图使用fileReader来读取单个行时,它会使我的代码停止工作。

以下是我的代码:

try {
    String line = "";
    fileReader = new BufferedReader(new FileReader(filename));

    while ((line = fileReader.readLine()) != null) {
        String[] tokens = line.split(DELIMITER);
        for (String token : tokens) {
            totalData.add(token);
            if (!artists.contains(token)) {
                artists.add(token);
            }
        }
        for (int l = 0; l <= 999; l++) {
            lineData = fileReader.readLine();
            lineArray[l] = lineData;
        }

    }
} finally {
    fileReader.close();
}

当我尝试读取arrayList的大小并打印从上面的arrayList获取的数据时,下面的代码会使其停止工作:
for (int l = 0; l <= 80; l++) {
    lineData = fileReader.readLine();
    lineArray[l] = lineData;
}

如果我注释掉这个for循环,一切都正常。我真的需要这个for循环,我该如何修改代码以解决这个问题?同时,发生了什么事情?

为什么要这样做?lineData = fileReader.readLine(); - Andrew Tobilko
@AndrewTobilko 我想单独提取每一行,以便稍后可以对每一行进行.contains()操作。 - Justin
1个回答

1
for (int l = 0; l <= 80; l++) {
    lineData = fileReader.readLine();
    lineArray[l] = lineData;
}

这段硬编码可以替换一行代码:

lineArray[i++] = line;

我纠正了你的代码,发生了以下情况:
String line = "";
int i = 0;
try (BufferedReader fileReader = new BufferedReader(new FileReader(""))) {
    while ((line = fileReader.readLine()) != null) {
        lineArray[i++] = line;
        String[] tokens = line.split(DELIMITER);
        for (String token : tokens) {
            totalData.add(token);
            if (!artists.contains(token)) {
                artists.add(token);
            }
        }
    }
}

它确实修复了问题,但我不明白为什么。 - Justin
@Justin,你在while循环中使用了for语句。 - Andrew Tobilko
@Justin,while语句可以帮助你读取行:while ((line = fileReader.readLine()) != null)。在该语句中,你不应该调用任何readLine()方法。 - Andrew Tobilko
@Justin,你明白吗?不要害怕问。 - Andrew Tobilko
我只是理解这是冲突了,我想。 - Justin
逐步调试您的旧代码,您就会知道为什么。 - HungPV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接