简体   繁体   English

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

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

Ignore the arguments being passed into the method. 忽略传递给方法的参数。 My code: 我的代码:

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

This is simply outputting "GOT TO THIS FRICKIN POINT" (I decided this string in my fury). 这只是输出“GOT TO THIS FRICKIN POINT”(我在愤怒中决定了这个字符串)。 I have no idea why. 我不知道为什么。 In my file, it shows: 在我的文件中,它显示:

"Hello"
"World"

I just don't get it. 我只是不明白。

EDIT: Cool. 编辑:很酷。 I didn't know that. 我不知道。 Unfortunately, that was just a simple example that I thought would solve my problem... it didn't. 不幸的是,这只是一个我认为可以解决我的问题的简单例子......事实并非如此。 Taking a look at my code below, and assuming that the file contains p.username, which is a string, on line 1, why is "got here" never printed and "did this" always printed. 看看我下面的代码,并假设该文件包含p.username,这是一个字符串,在第1行,为什么“到这里”永远不会打印,并且“总是打印”。 What I expected it to do: If p.username is on line x, it changes line x to read "p.username booleanvalue" and if p.username is not anywhere in the file, "p.username booleanvalue" is appended to the last line in the file. 我期望它做什么:如果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();}
}

(Yes, I know I have excessive flushes) (是的,我知道我有过多的冲洗)

This is where the Buffered in BufferedWriter comes in. 这是Buffered中的BufferedWriter所在。

You write two lines, which due to buffering are stored in memory. 你写了两行,由于缓冲而存储在内存中。

You then read from the file, which has nothing written to it yet. 然后,您从该文件中读取,该文件尚未写入任何内容。

Then you close the writer, causing the buffers to flush, adding the contents to the file. 然后关闭编写器,使缓冲区刷新,将内容添加到文件中。

To force flushing before you read, you can use bufferedWriter.flush() , or close it. 要在阅读之前强制刷新,可以使用bufferedWriter.flush()或关闭它。

You are not flushing your output: 你没有刷新你的输出:

Try this code boolean breakearly = false; 试试这段代码boolean breakearly = false; bufferedWriter.write("HeLlo"); bufferedWriter.write( “HELLO”); bufferedWriter.newLine(); bufferedWriter.newLine(); bufferedWriter.write("World!"); bufferedWriter.write( “世界!”);

    // flush
    bufferedWriter.flush();

    // close the bufferwriter
    bufferedWriter.close();

now read your file again 现在再次读取您的文件

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

当你写入文件时,你可以写入文件缓存,尝试调用bufferedWriter.close()来保存所有更改。

write these lines: 写下这些行:

bufferedWriter.flush();  // flush 

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

now read your file again

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM