二、字符输入输出流(Writer/Reader):(3种)
在输出输入操作时,以字符为单位进行操作,默认是unicode编码集.
字符流的抽象父类分别是:
Writer/Reader
Writer提供了字符输出流的常用方法:
void close(): 关闭
void write(char[] cbuf): 写一个字符数组
void write(char[] cbuf, int off, int len): 写一个字符数组的一部分
write(int c): 写一个字符
write(String str): 写一串字符
write(String str, int off, int len): 写字符串的一部分
Reader提供了字符输入流的常用方法:
int read(): 读一个字符,存储到int的低16位
int read(char[] cbuf): 将数据读进字符数组中,返回的是读取的有效字符个数
int read(char[] cbuf, int off, int len): 将字符读入数组的一部分
========================================================================
1.子类中转换流: (高级流)
--OutputStreamWriter:
将字符转换成字节写出到硬盘上
构造器:
OutputStreamWriter(OutputStream out):
创建一个指定字节输出流的字符输出流对象,采用的是系统默认的编码集
OutputStreamWriter(OutputStream out, Charset cs):
OutputStreamWriter(OutputStream out, CharsetEncoder enc):
OutputStreamWriter(OutputStream out, String charsetName):
创建一个指定字节输出流的字符输出流对象,采用指定编码集
write(int a):
当a的低16位,如果被设计成相应的字符时,如果两个字节都是
有效字节,会写出两个。如果低16位对应是无效字符,或是有效
字节只有一位时,会写一个字节。
--InputStreamReader:
将字节转换成字符读进程序中
构造器:
InputStreamReader(InputStream in);
创建一个使用默认字符集的InputStreamReader
InputStreamReader(InputStream in, Charset cs)
InputStreamReader(InputStream in, CharsetDecoder dec)
InputStreamReader(InputStream in, String charsetName)
创建一个使用指定字符集的InputStreamReader
2.缓冲字符输入输出流: (高级流)
--PrintWriter:
提供了丰富的方法,比BufferedWriter更加常用,
此类型提供了行自动刷新的功能
构造器:
PrintWriter(File file)
PrintWriter(OutputStream out)
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(String fileName)
PrintWriter(Writer out)
PrintWriter(Writer out, boolean autoFlush)
上述构造器,有第二个参数的,可以设置为true,表示行自动刷新。
只有一个参数的构造器,相当有两个参数时,设置为false的情况,即取消了行自动刷新的功能
常用方法:
println(): 通过写入行分隔符字符串来终止当前行。
println(boolean x): 打印一个布尔值,然后终止该行。
void println(char x): 打印一个字符,然后终止该行。
void println(char[] x): 打印字符数组,然后终止行。
void println(double x): 打印双精度浮点数,然后终止行。
void println(float x): 打印一个浮点数,然后终止该行。
void println(int x): 打印一个整数,然后终止该行。
void println(long x): 打印一个长整型,然后终止行。
void println(Object x): 打印一个对象,然后终止该行。
void println(String x):
--BufferedReader:提供了一个缓冲区
构造器:
BufferedReader(Reader in): 创建使用默认大小的输入缓冲区的缓冲字符输入流
BufferedReader(Reader in, int sz):创建使用指定大小的输入缓冲区的缓冲字符输入流
常用方法:
String readLine(): 读一行字符串,读至换行符号为止,返回的数据不包含换行符
当返回值为null时,表示读至文件末尾
3.文件字符流:(FileWriter/FileReader)
--FileWriter:
相当于OutputStreamWriter与FileOutputStream合起来的功能,
内部也维护了一个缓冲区,但是需要手动flush
构造器:
FileWriter(File file)
FileWriter(File file, boolean append)
FileWriter(String fileName)
FileWriter(String fileName, boolean append)
append:表示追加,但是此流不能设置字符集。
常用方法:
与 OutputStreamWriter的差不多
--FileReader:
相当于InputStreamReader和FileInputStream合起来的功能
内部也维护了一个缓冲区
构造器:
FileReader(File file)
FileReader(String fileName)
常用方法:
与InputStreamReader的方法差不多
========================================================================
*选择 进行输入/输出的内容是文本内容,应该考虑使用字符流; 进行输入/输出的内容是二进制内容,应该考虑使用字节流。
*字符集 Windows下简体中文默认使用GBK字符集, Linux下简体中文默认使用UTF-8字符集
========================================================================
*System:
是一个final修饰的类型.
--两个成员变量:
out:是PrintStream类型,默认的输出目的地是控制台console
in: 是InputStream类型,默认的数据源是键盘