概述
OutputStream是字节输出流的根类,Writer是字符输出流的根类。我们所说的输入输出都是相对Java程序而言的,所以输出是把内存中的数据读取到外存中。而分成两个根类的原因是在流的基本单位是字节,但是Java字符使用UTF-16编码,在UTF-16编码中,绝大部分字符是双字节的,所以单独划分一个类别来表示字符输出流。
OutputStream
概述
OutputStream是字节输出流,常用的直接实现类是FileOutputStream,它把文件作为数据输出位置。如果想加快输出效率,使用BufferedOutputStream。
API
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Test3 {
public static void main(String[] args) throws Exception {
//如果不存在这个文件,会自动创建
OutputStream fos = new FileOutputStream("D:\\aa.txt");
/**
* write(int b):将指定的字节写入此输出流。
*/
fos.write(97);
/**
* flush():刷新缓冲区,让write的数据真正写入磁盘文件
*/
fos.flush();
/**
* write(byte[] b):将 b.length 个字节从指定的 byte 数组写入此输出流。
*/
byte []bs = new byte[5];
for(int i = 0; i < 5; i++)
bs[i] = (byte) ((i % 26) + 97);
fos.write(bs);
fos.flush();
/**
* void write(byte[] b, int off, int len)
* 将指定 byte数组中从off开始的 len个字节写入此输出流。
*/
fos.write(bs, 2, 2);
fos.flush();
/**
* close():释放资源
*/
fos.close();
}
}
Writer
概述
这个类是写入字符文件的根类。它的常用实现类是FileWriter。同样的,如果要加快读取速度,使用带缓冲区的BufferedWriter类。
API
import java.io.FileWriter;
import java.io.Writer;
public class Test4 {
public static void main(String[] args) throws Exception {
//指定一个输出位置,如果不存在会自动创建
Writer w = new FileWriter("d:\\bbb.txt");
//写入单个字符
w.write(97);
//写入字符串
w.write("bcd");
//写入字符串的某一部分
w.write("defgf", 1, 2);
//写入字符数组
char []temps = {'g', 'h'};
w.write(temps);
//写入字符数组的某一部分
w.write(temps, 1, 1);
w.flush();
w.close();
/**
* File:
* abcdefghh
*/
//流被关闭之后是不能再被打开的,重新开启输出一个流,向其中写入数据会覆盖原有
//数据,如果我们想继续之前的写,可以使用追加方法,不过append方法虽然翻译过来叫住追加
//但是它不是追加,它的作用和write()差不多。
w = new FileWriter("d:\\bbb.txt");
//写入一个字符
w.append('|');
//写入一个字符串
w.append("abc");
//写入字符串的某一部分
w.append("def", 1, 2);
w.flush();
w.close();
/**
* File:
* |abce
*/
//字符流追加数据可以在构造方法中指定写入数据为追加数据
w = new FileWriter("d:\\bbb.txt", true);
w.write("aaa");
w.flush();
w.close();
/**
* File:
* |abceaaa
*/
}
}
InputStreamReader
OutputStreamReader是a bridge from character streams to byte streams:Characters written to it are encoded into bytes using a specified charset
。它有且只有FileWriter这个子类,所以FileWriter实现从写入文件的方法是从把字符按编码规则编码成字节数据后写入文件,默认是平台编码集。