我不明白这两节课之间的区别。您什么时候可以使用一种?我知道FileWriter可以将字符输出到文件,但据我所知,OutputStreamWriter也可以。这是我测试过的一些代码,它们似乎工作正常,我没有添加异常处理内容,而只是假设它们在那里。
FileWriter writer = new FileWriter("C:\\Users\\owner\\Desktop\\demo.txt");
writer.write("hello");
writer.close();
我也尝试了这段代码:
File file = new File("C:\\Users\\owner\\Desktop\\demo.txt");
os = new OutputStreamWriter(new FileOutputStream(file));
os.write("hello");
os.close();
这两个对我来说似乎都是一样的。唯一奇怪的事情是当我尝试将int值放入write()方法时。对于FileWriter示例,我的demo.txt完全为空。对于OutputStreamWriter示例,我在文本文件中得到了一些奇怪的符号。我正在阅读一本Java书籍,我对OutputStreamWriter的唯一解释是它“将字符流转换为字节流”,因此在第二个示例中,我是否不应该在文本文件中看到某些字节?
一些澄清将不胜感激。
最佳答案
XXXInputStream和XXXOutputStream(其中XXX不同,有很多选项)处理8位字节。例如OutputStream.write(byte[] c);
XXXWriter或XXXReader处理16位字符。例如,Reader.read(char[] cbuf)
。
OutputStreamWriter将OutputStream转换为Writer。您可能已经猜到了,InputStreamReader从InputStream转换为Reader。我不知道任何相反的类,即将Reader转换为InputStream。
FileWriter是与文件对话的Writer。由于Java String内部使用char(16位,因此它们可以处理Unicode),因此FileWriter是与Unicode String一起使用的自然类。
FileOutputStream是用于将字节写入文件的OutputStream。 OutputStreams不接受字符(或字符串)。通过将其包装在OutputStreamWriter中,您现在有了一个Writer,它可以接受Strings。
现在,真正的问题是,何时使用阅读器/书写器以及何时使用流?我已经使用Java多年了,有时我也会感到困惑。我相信以下是正确的:
实用指南-如何确定使用哪个:
读者/作家。
其他一些链接:
inputstream and reader in Java IO
InputStream vs InputStreamReader