可以使用流 访问文件系统上的文件。在最低的级别上,流允许程序接收来自数据源的字节,或者允许将输出发送到目的地。一些流可以处理所有类型的 16 位字符(类型 Reader
和 Writer
)。而其他一些流则只能处理 8 位字符(类型 InputStream
和 OutputStream
)。在这些分层结构中,有几种风格的流(所有流都可以在 java.io
包中找到)。在最高级别的抽象中,有一些字符流 和字节流。
字节流读取(InputStream
及其子类)并编写(OutputStream
及其子类)8 位字节。换句话说,可以将字节流看作是一种更原始的流。因此,也就不难理解为什么关于基本 Java 语言类的 Java.sun.com 教程说字节流通常用于二进制数据,比如说图像。以下是一个选定的字节流列表:
FileInputStream 从某一文件中读取文件
FileOutputStream
将字节写入某个文件中。
ByteArrayInputStream ByteArrayOutputStream | 从某个内存数组中读取字节,以及将字节写入某个内存数组中。 |
字符流可以读取(Reader
及其子类)和写入(Writer
及其子类)16 位的字符。子类也可以从数据接收器 中读取或写入数据,或者处理转换中的字节。以下是一个选定的字符流列表:
StringReader StringWriter | 这些流从内存中的 String 中读取或写入字符。 |
InputStreamReader InputStreamWriter (及其子类 FileReader FileWriter ) | 是字节流与字符流之间的桥梁。Reader 风格(flavor)从字节流读取字节,并将它们转换成字符。而 Writer 风格将字符转换成字节,并将它们放在字节流上。 |
BufferedReader 和 BufferedWriter | 在缓冲数据的同时读取或写入另个流,它使读取或写入操作更加有效。可以用缓冲的流包装 另一个流。 |
存在着几种读取和写入 File
的方法,但是通常,最简便的方法如下所示:
- 在
File
上创建一个FileWriter
。 - 将
FileWriter
包装到一个BufferedWriter
中。 - 只要有必要,可以在
BufferedWriter
上调用write()
来编写File
的内容,通常每个行都是以一个行终止符(即/n
)结尾的。 - 在
BufferedWriter
上调用flush()
来清空它。 - 关闭
BufferedWriter
,如果有必要,还需要清除它