忽略传递给方法的参数。
我的代码:
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/