Java BufferedReader到字符串数组

Java BufferedReader到字符串数组,java,arrays,while-loop,filereader,filewriter,Java,Arrays,While Loop,Filereader,Filewriter,我在stackoverflow上浏览了很多不同的主题,但到目前为止没有找到任何有用的内容:/ 这就是我的问题。我正在写文件复印机。读取文件时已出现问题。我的测试文档有3行随机文本。所有这三行都应该写入一个字符串数组。问题是数组中只写入textdocument的第2行,我不知道为什么。已经调试过了,但没有进一步的进展 我知道对于具有不同类的文件复制机有不同的解决方案,但我真的很想让它与我在这里使用的类一起运行 String[] array = new String[5]; Stri

我在stackoverflow上浏览了很多不同的主题,但到目前为止没有找到任何有用的内容:/

这就是我的问题。我正在写文件复印机。读取文件时已出现问题。我的测试文档有3行随机文本。所有这三行都应该写入一个字符串数组。问题是数组中只写入textdocument的第2行,我不知道为什么。已经调试过了,但没有进一步的进展

我知道对于具有不同类的文件复制机有不同的解决方案,但我真的很想让它与我在这里使用的类一起运行

    String[] array = new String[5];
    String datei = "test.txt";
    public String[] readfile() throws FileNotFoundException {
    FileReader fr = new FileReader(datei);
    BufferedReader bf = new BufferedReader(fr);
    try {
        int i=0;
        //String  Zeile = bf.readLine();
        while(bf.readLine() != null){
            array[i] = bf.readLine();
        //  System.out.println(array[i]);  This line is for testing
            i++;
        }
        bf.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return array;

对于循环的每次迭代,您将调用两次
readLine()
,从而丢弃每一行。您需要捕获每次调用
readLine()
返回的值,因为每次调用
readLine()
都会提升读取器在文件中的位置

以下是解决方案:

String line;
while((line = bf.readLine()) != null){
    array[i] = line;
    i++;
}
这里你读到了两行:

   while(bf.readLine() != null){
        array[i] = bf.readLine();
    //  System.out.println(array[i]);  This line is for testing
        i++;
    }
您必须将代码更改为:

   String line = null;
   while((line =bf.readLine()) != null){
        array[i] = line;
    //  System.out.println(array[i]);  This line is for testing
        i++;
    }
问题在于:

while(bf.readLine() != null)
readLine()

因此,不仅要检查返回值是否为
null
,还要存储它

String txt = null;
while((txt = bf.readLine()) != null)
    array[i++] = txt;

我想这是因为您调用了readLine()两次。第一次在循环中,第二次在数组中。因此,它读取循环开头的一行代码(第1行),然后读取循环中的第一行代码(您看到的第2行)

感谢您提供了超快速且非常有用的答案!现在一切都很好。如果我有声誉的话,你会投票并将其标记为最佳答案。通过接受答案,你完全做到了
:)
,如果你真的觉得你也需要投票,当你有足够的代表时,你可以随时回来。它不会给我测试文件中的3行,而是给我3行,上面写着“null”。问题已经解决了,但我想尽可能多地学习。如果我们能让您的解决方案也起作用,我们将非常高兴。