读取文件并将其放入数组,但第1行为空?

时间:2018-11-29 12:27:46

标签: java

我制作了一个文本文件,其中包含5个随机字符串,并且我试图将内容放入名为“ text”的数组中。 最后4个字符串可以正常工作,但是第一个字符串被打印为null?

import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;

public class Task4 {

    public static void main(String[] args) throws IOException {

        FileReader fr = new FileReader("filepath");
        BufferedReader br = new BufferedReader(fr);
        String line = br.readLine();
        String[] txt = new String[5];
        do {
            for (int i = 1; i < 5; i++) {
                txt[i] = br.readLine();
            }
        } while ((line = br.readLine()) != null);
        System.out.println(txt[0]); // prints null
        System.out.println(txt[1]); // works fine
        System.out.println(txt[2]); // works fine
        System.out.println(txt[3]); // works fine
        System.out.println(txt[4]); // works fine
    }
}

编辑

我尝试将for循环更改为从0开始,但是它完全跳过了第一个字符串,并使最后一个字符串([txt [4])打印为null ...

3 个答案:

答案 0 :(得分:3)

好,您的循环从1开始,即txt[0]从未分配任何值。

更改

for (int i = 1; i < 5; i++)

for (int i = 0; i < 5; i++)

你应该没事。

此外,在循环外首次调用br.readLine()时,第一行将被丢弃。并且您的资源(FileReaderBufferedReader)没有关闭。

像这样更改代码:

try (BufferedReader br = new BufferedReader(new FileReader("filepath"))) {
    String[] txt = new String[5];
    int i = 0;
    String line = null;
    while ((line = br.readLine()) != null && (i < 5)) {
        txt[i] = line;
        i++;
    }
}

答案 1 :(得分:1)

您已经这样声明了行变量,

String line = br.readLine();

消耗第一行。

只需将其初始化为null。

String line = null;

此外,在for循环中使i = 0而不是1,这会引起问题。另外,您还可以将行读入line变量,但不要将其分配给数组,因此也应将其删除。

实际上,您不需要在while循环内使用for循环,而是可以使代码像这样,

public static void main(String[] args) throws IOException {

    FileReader fr = new FileReader("filepath");
    BufferedReader br = new BufferedReader(fr);
    String[] txt = new String[5];
    for (int i = 0; i < 5; i++) {
        txt[i] = br.readLine();
    }
    System.out.println(txt[0]); // prints null
    System.out.println(txt[1]); // works fine
    System.out.println(txt[2]); // works fine
    System.out.println(txt[3]); // works fine
    System.out.println(txt[4]); // works fine
    br.close();
}

这将打印您的所有五行,没有任何问题。

答案 2 :(得分:0)

这是因为在for循环中,您的int从行号1开始,而不是从行号0开始。

 for (int i = 1; i < 5; i++)

应该是

 for (int i = 0; i < 5; i++)