- #字符流的操作(Reader、Writer)
@继承框架
Reader //操作了Closeable接口,因此可以同自动关闭资源语法代替手动调用close()方法
StringReader
CharArrayReader
InputStreamReader
FileReader
BufferedReader
Writer //操作了Closeable接口
StringWriter
CharArrayWriter
PrintWriter
OutputStreamWriter
FileWriter
BufferedWriter
@Reader、Writer的基本用法
1.Reader操作了Closeable, Readable接口的抽象类,其下有close(), read()两个抽象方法。
2.Writer操作了 Appendable, Closeable, Flushable接口的抽象类,其下有close(), write(), flush()三个抽象方法。
---> Demo举例
import static java.lang.System.out;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.io.FileReader;
import java.io.StringWriter;
class ActionOfCharIO{
public static void copy(Reader src, Writer dest) throws IOException{
char data[] = new char[2048];
int len;
try(Reader input = src; Writer output = dest){
while( (len = input.read(data)) != -1){
output.write(data, 0, len);
}
}
}
}
public class Temp{
public static void main(String... args) throws IOException{
FileReader reader = new FileReader(args[0]);
StringWriter writer = new StringWriter();
ActionOfCharIO.copy(reader, writer);
out.println(writer.toString());
}
}
@Reader、Writer常用的子类
1.StringReader可以将字符串打包,当做读取来源;StringWriter可以作为写入的目的地,最后用toString()方法取得所有写入的字符所组成的字符串。
2.CharArrayReader、CharArrayWriter类似地则是以char数组作为读取的来源或写入的目的地。
3.FileReader、FileWriter,对文档实现读取和写入。读取或写入时默认会使用当前操作系统的默认编码来做字符转换,当然也可以在启动JVM时自行指定编码格式。如下,指定编码为UTF-8:
java -Dfile.encoding=UTF-8 要运行的字节码文件名
但是,FileReader、FileWriter并没有提供指定编码的调用,如果在程序执行过程中要指定编码格式,则必须使用InputStreamReader、OutputStreamWriter这两个装饰器类。
@字符流的打包器(装饰器)
1.InputStreamReader与OutputStreamWriter,自定义将字节数据转换为指定编码格式的字符。
创建InputStreamReader与OutputStreamWriter时,可以指定编码,如果没有指定编码,则以JVM启动时所获取的默认编码为准。
---> Demo举例
import static java.lang.System.out;
import java.io.*;
public class Temp{
public static void copy(Reader src, Writer dest) throws IOException{
char data[] = new char[2048];
int len;
try(Reader input = src; Writer output = dest){
while( (len = input.read(data)) != -1){
output.write(data, 0, len);
}
}
}
public static void copy(InputStream src, OutputStream dest, String charSet) throws IOException{
copy(new InputStreamReader(src, charSet), new OutputStreamWriter(dest, charSet));
}
public static void main(String... args) throws IOException{
//通过System.getProperty("file.encoding")获取系统的默认编码格式; 也可以指定其它的,如:UTF-8;
copy(new FileInputStream(args[0]), new FileOutputStream(args[1]), System.getProperty("file.encoding"));
}
}
2.BufferedReader与BufferedWriter,为Reader或Writer提供缓冲区,提高部分效率。
3.PrintWriter,对OutputStream、Writer等进行打包,提供print()、println()、format()等方法。