Java 写入文件时的奇怪行为
我尝试了一些基本的Java I/O操作,我尝试运行以下代码:Java 写入文件时的奇怪行为,java,file-io,io,printwriter,bufferedwriter,Java,File Io,Io,Printwriter,Bufferedwriter,我尝试了一些基本的Java I/O操作,我尝试运行以下代码: public static void main(String[] args) { File file = new File("fileWrite2.txt"); // create a File object try { FileWriter fr = new FileWriter(file); PrintWriter pw = new PrintWriter(file); // create a
public static void main(String[] args) {
File file = new File("fileWrite2.txt"); // create a File object
try {
FileWriter fr = new FileWriter(file);
PrintWriter pw = new PrintWriter(file); // create a PrintWriter that will send its output to a Writer
BufferedWriter br = new BufferedWriter(fr);
br.write("sdsadasdsa");br.flush();br.append("fffff");br.flush();
pw.println("howdy"); // write the data
pw.println("folks");
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
当我运行上述命令时,我在创建的文件中获得以下输出:
howdy
folks
f
有人能解释为什么“f”出现在最后一行吗?f来自
br.append(“fffff”)的剩余字符串由BufferedWriter
写入文件的code>
由于BufferedWriter
和PrintWriter
都写入同一个文件,因此PrintWriter
写入的内容将覆盖BufferedWriter
写入的内容
但是,PrintWriter
写入的字节数似乎少于1,从而完全覆盖了BufferedWriter
写入的数据,因此得到了f
如果您更改此br.append(“fffff”)代码>添加到br.append(“ffffg”)代码>,您可以看到g
现在剩余。或者,更改pw.println(“乡亲”)代码>到pw.println(“folks1”)代码>将显示以前写入的数据现在已被PrintWriter
完全覆盖
所有这些混乱都是因为同一文件对象有两个不同的写入程序,这是问题的原因。如前所述,一个文件对象只有一个writer
注意:要测试的另一件有趣的事情是移动第二个br.flush()代码>在pw.flush()之后代码>
执行此操作将在bufferedwriter
上写入15个字符
`
但当您在printWriter上写入时,它会覆盖文件的内容
这次你在写作
pw.println("howdy"); // write the data
pw.println("folks");
因为windows中的\n
将转换为\r\n
,所以使用println后,它只包含10个字符和两个新行\n
,需要2个字节。总共14个。
因此,代码中保留了1个字符,即f,执行以下步骤
1何时
br.write("sdsadasdsa");br.flush();br.append("fffff");br.flush();
被执行
文件内容将被删除
sdsadasdsafffff
2何时
pw.println(“你好”);我在打电话
字符串howdy覆盖前5个字符sdsad,新行终止该行。在txt中,需要2个字符\r\n,这将覆盖另2个字符。然后文件内容将如下所示:
howdy
dsafffff
3何时
普华永道(“乡亲”);
被执行
因为在第2步中没有调用flush()方法。字符串将覆盖文件中的第二行内容。和一个新的行来覆盖另外2个字符
然后,以下内容将存储在文件中:
howdy
folks
f
简而言之,每个文件只能使用一个编写器。谢谢。更新了答案,提到了这一点!:)@R.J-尝试了你的建议,移动了第二个br.flush();在pw.flush()之后;。现在输出变为:howdy Folffff有人能解释一下吗?写入程序是否只在我们刷新()流之后才写入文件?
howdy
dsafffff
howdy
folks
f