为什么bufferedreader在这些值上返回null?

时间:2019-03-04 01:16:40

标签: java

这是我的代码,我正在使用bufferedreader来读取文件。它会将读取的值存储到数组中,但是当我尝试打印出数组时,它将返回空值。为什么会这样?代码:

BufferedReader reader = new BufferedReader(new FileReader("valid file path here"));
        int lines = 0;
        while (reader.readLine() != null) {
            lines++;
        }

        //declare and fill array
        String[] coin_names = new String[lines];
        String line; 
        int x = 0;
        while ((line = reader.readLine()) != null) {
            coin_names[x] = line;
            x++;
        }

        for (int y = 0; y < lines; y++) {
            System.out.println(coin_names[y]);
        }

为什么它为得到的所有值都返回null?

1 个答案:

答案 0 :(得分:3)

问题出在这里

while (reader.readLine() != null) {
    lines++;
}

您的初始while循环正在消耗整个文件。更好的方法是将其删除,而仅使用列表存储行:

List<String> coinNames = new ArrayList<>();
String line; 
int x = 0;
while ((line = reader.readLine()) != null) {
    coinNames.add(line);
    x++;
}

for (String name : coinNames) {
    System.out.println(name);
}

虽然您可以尝试重置阅读器,但没有理由为什么只需要初始化一个数组就必须两次读取整个文件。为作业使用正确的数据结构。