Java:while((line = bufferedReader.readLine())!= null)MISSING 2 LINES

时间:2014-02-09 20:25:14

标签: java bufferedreader readline

忽略传递给方法的参数。 我的代码:

    public static void setEnabled(EntityPlayer p, Boolean b){
    try{
        FileReader fileReader = new FileReader(SLInfo.STORAGEFILE);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        FileWriter fileWriter = new FileWriter(SLInfo.STORAGEFILE);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        String line = null;
        boolean breakearly = false;
        bufferedWriter.write("HeLlo");
        bufferedWriter.newLine();
        bufferedWriter.write("World!");

        System.out.println("GOT TO THIS FRICKIN POINT");

        while((line = bufferedReader.readLine()) != null){
            System.out.println(line);
            Thread.sleep(2000);
        }
        bufferedReader.close();
        bufferedWriter.close();
    }catch(Exception e){e.printStackTrace();}
}

这只是输出“GOT TO THIS FRICKIN POINT”(我在愤怒中决定了这个字符串)。我不知道为什么。在我的文件中,它显示:

"Hello"
"World"

我只是不明白。

编辑:很酷。我不知道。不幸的是,这只是一个我认为可以解决我的问题的简单例子......事实并非如此。看看我下面的代码,并假设该文件包含p.username,这是一个字符串,在第1行,为什么“到这里”永远不会打印,并且“总是打印”。我期望它做什么:如果p.username在第x行,它将第x行更改为“p.username booleanvalue”,如果p.username不在文件中的任何位置,则“p.username booleanvalue”将附加到文件的最后一行。

    public static void setEnabled(EntityPlayer p, Boolean b){
    try{
        FileReader fileReader = new FileReader(SLInfo.STORAGEFILE);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        FileWriter fileWriter = new FileWriter(SLInfo.STORAGEFILE);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        String line = null;
        boolean breakearly = false;

        while((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
            if (line.contains(p.username)){
                System.out.println("Got here");
                bufferedWriter.write(p.username + " " + Boolean.toString(b));
                bufferedWriter.newLine();
                bufferedWriter.flush();
                breakearly = true;
                break;
            }
        }
        bufferedWriter.flush();
        System.out.println(breakearly);
        if (!breakearly){
            System.out.println("did this");
            bufferedWriter.write(p.username + " " + Boolean.toString(b));
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }
        bufferedReader.close();
        bufferedWriter.close();
    }catch(Exception e){e.printStackTrace();}
}

(是的,我知道我有过多的冲洗)

4 个答案:

答案 0 :(得分:4)

这是Buffered中的BufferedWriter进入的地方。

你写两行,由于缓冲而存储在内存中。

然后您从该文件中读取,该文件尚未写入。

然后关闭编写器,使缓冲区刷新,将内容添加到文件中。

要在阅读前强制刷新,可以使用bufferedWriter.flush()或关闭它。

答案 1 :(得分:0)

你没有冲刷你的输出:

试试这段代码         boolean breakearly = false;         bufferedWriter.write( “HELLO”);         bufferedWriter.newLine();         bufferedWriter.write( “世界!”);

    // flush
    bufferedWriter.flush();

    // close the bufferwriter
    bufferedWriter.close();

现在再次阅读你的文件

    while((line = bufferedReader.readLine()) != null){
        System.out.println(line);
        Thread.sleep(2000);
    }

答案 2 :(得分:-1)

当您写入文件时,您实际上是写入文件缓存,尝试调用bufferedWriter.close()来保存所有更改。

答案 3 :(得分:-1)

写下以下这些专栏:

bufferedWriter.flush();  // flush 

// now close the bufferwriter
bufferedWriter.close();

now read your file again

while((line = bufferedReader.readLine()) != null){
  // your reading code
}