Java 为什么FileOutputStream';s write()方法写入字符,但输出StreamWriter';s不能吗?

Java 为什么FileOutputStream';s write()方法写入字符,但输出StreamWriter';s不能吗?,java,Java,(一) (二) (2) 可以成功写入“a”,但(1)不能。谁能告诉我为什么 它们都可以将字节/字符写入文件(在OutputStream的情况下,您实际上正在编写字节,并且使用Writerachar) 您的特殊问题是,您没有关闭输出流(),为了将数据刷新到磁盘,您应该始终这样做 写入程序有一个小缓冲区。您可以通过调用或关闭来强制刷新 FileOutputStream fos = new FileOutputStream("B.txt"); fos.write('a'); 或者更好: Output

(一)

(二)


(2) 可以成功写入“a”,但(1)不能。谁能告诉我为什么

它们都可以将字节/字符写入文件(在
OutputStream
的情况下,您实际上正在编写
字节
,并且使用
Writer
a
char

您的特殊问题是,您没有关闭输出流(),为了将数据刷新到磁盘,您应该始终这样做

写入程序
有一个小缓冲区。您可以通过调用或关闭来强制刷新

FileOutputStream fos = new FileOutputStream("B.txt");
fos.write('a');
或者更好:

OutputStreamWriter ows = new OutputStreamWriter(new FileOutputStream("a.txt"));
ows.write('a');
ows.close();
FileOutputStream fos = new FileOutputStream("b.txt");
fos.write('b');
fos.close();

…因为Java的架构师就是这样设计的
OutputStreamWriter
在其构造函数中获取一个
FileOutputStream
。因此,如果您想在
OSW
中写入一个字符,您当然可以通过在上面的代码片段中创建的
FOS
来完成。@daniu您的答案出了什么问题?在B.txt文件中,可以显示“a”,但a.txt不能。但论点是一样的@Tim Biegelesen
OutputStreamWriter ows = new OutputStreamWriter(new FileOutputStream("a.txt"));
ows.write('a');
ows.close();
FileOutputStream fos = new FileOutputStream("b.txt");
fos.write('b');
fos.close();
try (OutputStreamWriter ows = new OutputStreamWriter(new FileOutputStream("a.txt"))) {
    ows.write('a');
}
try (FileOutputStream fos = new FileOutputStream("b.txt")) {
    fos.write('b');
}