一、Writer:用于写入字符流的抽象类。 子类必须实现的唯一方法是write(char [],int,int),flush()和close()。 然而,大多数子类将覆盖这里定义的一些方法,以便提供更高的效率,附加的功能或两者。
常用函数:
1.append(CharSequence csq) 将指定的字符序列附加到此作者。
2.write(String str) 写一个字符串
3.write(char[] cbuf) 写入一个字符数组。
4.flush() 刷新流。
5.close() 关闭流,先刷新。
已知子类:
1.BufferedWriter :将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
构造函数:
1.public BufferedWriter(Writer out)
常用函数:
1.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
2.close() 关闭流,先刷新。
3.flush() 刷新流。
2.OutputStreamWriter :可以实现字节流转字符流:它读取字节,并使用指定的charset将其解码为字符。
构造函数:
1.OutputStreamWriter(OutputStream out, Charset cs)
常用函数:
1.close() 关闭流,先刷新。
2.flush() 刷新流。
3.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
已知子类
3. FileWriter 是用于写入字符流
构造函数:
1.FileWriter(File file)
常用函数:
1.close() 关闭流,先刷新。
2.flush() 刷新流。
3.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
4.CharArrayWriter :该类实现了可以用作Writer的字符缓冲区。 当数据写入流时,缓冲区会自动增长
构造函数:
1.CharArrayWriter(int initialSize)
常用函数:
1.close() 关闭流,先刷新。
2.flush() 刷新流。
3.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
5.FilterWriter:用于编写过滤后的字符流的抽象类。 抽象类FilterWriter本身提供了将所有请求传递给包含流的默认方法
构造函数:
1.CharArrayWriter(int initialSize)
常用函数:
1.close() 关闭流,先刷新。
2.flush() 刷新流。
3.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
6.PipedWriter:管道流
构造函数:
1.PipedWriter(PipedReader snk)
常用函数:
1.close() 关闭流,先刷新。
2.flush() 刷新流。
3.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
4.connect(PipedReader snk) 将此管道写入器连接到接收器。
7.StringWriter:字符串流
构造函数:
1.StringWriter(int initialSize)
常用函数:
1.close() 关闭流,先刷新。
2.flush() 刷新流。
3.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
4.getBuffer() 返回字符串缓冲区本身。
8.PrintWriter:打印流,将对象的格式表示打印到文本输出流
构造函数:
1.PrintWriter(OutputStream out)
2.PrintWriter(File file)
3.PrintWriter(Writer out)
常用函数:
1.close() 关闭流,先刷新。
2.flush() 刷新流。
3.write(char[] cbuf, int off, int len) 写入字符数组的一部分。
4.print(String s) 打印字符串。
常用的实例代码
//FileWriter 文件最简单的用法
public static void fileWriterTest(String data,String path){
FileWriter fileWriter=null;
try {
File file=new File(path);
if(!file.exists()){
file.createNewFile();
}
//给一个File对象构造一个FileWriter对象。 如果第二个参数是true ,则字节将写入文件的末尾而不是开头。
fileWriter=new FileWriter(pathTest,true);
fileWriter.write(data);
//刷新流,将数据写入文本
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fileWriter!=null){
try {
//close方法内部也会调用一次flush函数刷新流
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//FileWriter增加缓冲技术的用法,使用BufferedWriter包装类
public static void fileWriterTest2(String data, String path) throws IOException{
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
}
BufferedWriter bufferedWriter=null;
try {
bufferedWriter=new BufferedWriter(new FileWriter(pathTest,true));
bufferedWriter.write(data);
bufferedWriter.flush();
}finally {
if(bufferedWriter!=null){
bufferedWriter.close();
}
}
}
//字节流转字符流
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static void OutputStreamWriterTest(String data, OutputStream out){
//java7的新特性,跳出try代码块将自动执行close方法
try( OutputStreamWriter outputStreamWriter=new OutputStreamWriter(out);){
outputStreamWriter.write(data);
} catch (IOException e) {
}
}