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

    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();}
}

(是的,我知道我有过多的潮红)

最佳答案

这就是 Buffered 中的 BufferedWriter 的用武之地。

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

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

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

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

关于Java:while((line = bufferedReader.readLine()) != null) 缺少 2 行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21664566/

10-16 12:34