[英]Java: while((line = bufferedReader.readLine()) != null) MISSING 2 LINES
忽略传递给方法的参数。 我的代码:
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()
或关闭它。
你没有刷新你的输出:
试试这段代码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);
}
当你写入文件时,你可以写入文件缓存,尝试调用bufferedWriter.close()
来保存所有更改。
写下这些行:
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.