忽略传递给方法的参数。 我的代码:
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();}
}
(是的,我知道我有过多的冲洗)
答案 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
}