Java中的FileWriter与FileOutputStream

10 java

我对有点糊涂FileWriterFileOutputStream.当我看到FileWriter的源代码时,只有4个构造函数,每个构造函数都在调用FileOutputStream构造函数.

public FileWriter(String fileName) throws IOException {
       super(new FileOutputStream(fileName));
}
public FileWriter(String fileName, boolean append) throws IOException {
        super(new FileOutputStream(fileName, append));
}
public FileWriter(File file) throws IOException {
        super(new FileOutputStream(file));
}
public FileWriter(File file, boolean append) throws IOException {
        super(new FileOutputStream(file, append));
}
public FileWriter(FileDescriptor fd) {
        super(new FileOutputStream(fd));
}
Run Code Online (Sandbox Code Playgroud)

它们之间的区别搜索后,我发现这里提到.

FileOutputStream用于写入原始字节流,例如图像数据.要编写字符流,请考虑使用FileWriter.

怎么FileWriter能有所作为?即使它仍然FileOutputStream没有任何改变地调用构造函数.

Jon*_*eet 16

FileWriter是一个Writer.这是关于编写文本 - 它恰好是将其写入文件.它通过保存对a的引用来实现FileOutputStream,该引用在FileWriter构造函数中创建并传递给超类构造函数.

FileOutputStream是一个OutputStream.这是关于编写二进制数据.如果你想给它写文本,你需要把这些文本转换成二进制数据 - 而这正是FileWriter它的作用.我个人更喜欢使用FileOutputStream在包裹OutputStreamWriter 由我,让我来指定字符编码(如FileWriter总是使用平台默认的编码,烦人).

基本上,想想FileWriter是一种让你写作的简单方法:

Writer writer = new FileWriter("test.txt");
Run Code Online (Sandbox Code Playgroud)

代替

Writer writer = new OutputStreamWriter(new FileOutputStream("test.txt"));
Run Code Online (Sandbox Code Playgroud)

除了我通常建议使用OutputStreamWriter接受a 的构造函数的重载Charset.


Sci*_*n11 5

FileOutputStream是编写原始类型的数据,例如int,而FileWriter编写面向字符的数据。

FileOutputStream没有附带处理字符串的方法。如果要使用FileOutputStream将字符串写入文件,则必须执行以下操作:

FileOutputStream fos=new FileOutputStream();
String str="Hello";
byte b[]=str.getBytes();
fos.write(b);
fos.close();
Run Code Online (Sandbox Code Playgroud)

Filewriter字符串和字节数组之间没有转换。你可以简单地使用:

FileWriter fr=new FileWriter("C:\\");
fr.write("Hello");
fr.close();
Run Code Online (Sandbox Code Playgroud)

如果需要,不要忘记抛出任何异常。