目录
一、转换流
InputStreamReader
OutputStreamWriter
二、打印流
PrintStream
PrintWriter
三、缓存读取流
一、转换流
构造器 |
描述 |
InputStreamReader(InputStream in) |
创建一个使用默认字符集的InputStreamReader |
InputStreamReader(InputStream in,String charsetName) |
创建一个使用指定charset的InputStreamReader |
返回值类型 |
方法名称 |
描述 |
String |
getEncoding() |
返回此流使用的字符编码的名称 |
int |
read() |
读取一个字符 |
int |
read(char[] cbuf,int offset, int length) |
将字符读入数组的一部分,从offset开始读取length个数据 |
boolean |
ready() |
判断此流是否可以读取 |
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("I:\\a.txt");
InputStreamReader reader = new InputStreamReader(fis);
char[] chars = new char[128]; //字符缓存数组
int len = -1; //每次读取的长度
while ((len = reader.read(chars))!=-1){
//锄禾日当午,汗滴禾下土
System.out.println(new String(chars,0,len));
}
reader.close();
fis.close();
}
OutputStreamWriter
构造器 |
描述 |
OutputStreamWriter(OutputStream in) |
创建一个使用默认字符集的OutputStreamWriter |
OutputStreamWriter(OutputStream in,String charsetName) |
创建一个使用指定charset的OutputStreamWriter |
返回值类型 |
方法名称 |
描述 |
void |
flush() |
刷新流对象,将缓存中的字符强制写入文件中 |
String |
getEncoding() |
返回此流使用的字符编码的名称 |
void |
write(char[] cbuf,int off,int len) |
写一个字符数组的一部分 |
void |
write(int c) |
写一个字符 |
void |
write(String str,int off,int len) |
写一个字符串的一部分 |
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("I:\\a.txt");
OutputStreamWriter writer = new OutputStreamWriter(fos);
writer.write("床前明月光");
writer.close();
fos.close();
}
二、打印流
- 常用于字符输出,相较于字符输出流,打印流输出文本内容更加便利
- 如果要写入某些内容,更建议把输出流转化为打印流进行操作
PrintStream
- 常用的控制台打印语句System.out.println()就是使用了该打印流
- 常用构造方法
构造器 |
描述 |
PrintStream(File file) |
使用指定的文件创建打印流对象 |
PrintStream(OutputStream out) |
根据传入的字节输出流创建打印流对象 |
PrintStream(String fileName) |
使用指定的文件名创建打印流对象 |
|
|
- 常用API
- 在封装的对象的API基础上,加多了print和println等方法,用于打印一行或打印不换行的数据写入文本中
- 举例
public static void main(String[] args) throws IOException {
//append设置为true,在原来文件的基础上继续添加数据
FileOutputStream fso = new FileOutputStream("I:\\a.txt",true);
//将字节输出流封装成打印流
PrintStream ps = new PrintStream(fso);
ps.println("床前明月光");
ps.println("疑是地上霜");
ps.append("锄禾日当午").append("汗滴禾下土");
ps.close();
fso.close();
}
PrintWriter
- 可以理解为是PrintStream的升级,两者的功能相差不是太大
- 在输出字符后,需要用flush刷新一下,或调用close()方法才能写入数据
- 构造方法
- 可以根据File对象,或OutputStream对象,或Writer对象,或String代表的文件创建打印流
- 常用API
- 用完之后记得flush一下,否则可能写不进文件中
- 举例
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("I:\\a.txt");
PrintWriter writer = new PrintWriter(fw);
writer.println("锄禾日当午");
writer.println("汗滴禾下土");
//需要flush一下
writer.flush();
writer.append("床前明月光").append("疑是地上霜");
writer.flush();
writer.close();
fw.close();
}
三、缓存读取流
- 指的是BufferedReader
- 用于将字符输入流转换为带有缓存,且可以一次读取一行的缓存字符读取流
- 构造方法
构造器 |
描述 |
BufferedReader(Reader in) |
创建使用默认大小的输入缓冲区的缓冲字符输入流 |
BufferedReader(Reader in, int sz) |
创建使用指定大小的输入缓冲区的缓冲字符输入流 |
返回值类型 |
方法名 |
描述 |
int |
read() |
读取一个字符 |
String |
readLine() |
读取一行文字 |
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("I://a.txt");
BufferedReader reader = new BufferedReader(fr);
//读取的文本
String text = null;
while ((text = reader.readLine())!=null){
//读取一行数据
System.out.println(text);
}
}