java-API之字符流的读取和写入
字符流的读取
字符流常用于处理纯文本数据。
Reader类
Reader类是抽象类。
public abstract class Reader{} // Reader类是抽象类。
常用方法
- abstract void close() 关闭该流并释放与之关联的所有资源。
- int read() 读取单个字符。
- int read(char[] cbuf) 将字符读入数组。
- abstract int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。
InputStreamReader 子类
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
创建对象:
- InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
- InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。
Reader r1 = new InputStreamReader( new FileInputStream( "F:\\ioTest\\1.txt" ) );
Reader r2 = new InputStreamReader( new FileInputStream( new File("F:\\ioTest\\1.txt") ) );
Reader r3 = new InputStreamReader( new FileInputStream( "F:\\ioTest\\1.txt" ), "utf-8" );
Reader r4 = new InputStreamReader( new FileInputStream( new File("F:\\ioTest\\1.txt"), "utf-8" ) );
FileReader 子类
用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader(如上面的InputStreamReader类的使用)。 FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。
创建对象
- FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。
- FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
Reader r = new FileReader( new File("F:\\ioTest\\1.txt") );
Reader r2 = new FileReader( "F:\\ioTest\\1.txt" );
BufferedReader 子类
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
创建对象:
- BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
- BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
Reader r1 = new BufferedReader( new FileReader( "F:\\ioTest\\1.txt" ) ); // 使用默认大小的缓存区
Reader r2 = new BufferedReader( new FileReader( "F:\\ioTest\\1.txt" ), 8 * 1024 ); // 指定缓存区数组的大小
字符流读取的案例
try {
// 1、创建字符流读取流对象
// Reader r1 = new FileReader("F:\\ioTest\\a\\1.txt");
// Reader r2 = new FileReader(new File("F:\\ioTest\\a\\1.txt"));
Reader r = new BufferedReader(new FileReader("F:\\ioTest\\a\\1.txt")); // BufferedReader更为高效
// 2、开始读取数据 数据读取结束返回 -1
int data = 0;
while((data = r.read()) != -1) {
System.out.println(data);
}
// 3、释放资源
} catch (IOException e) {
e.printStackTrace();
}
字符流写出
Writer
写入字符流的抽象类
public abstract class Writer{} // Writer是抽象类
常用方法:
- void write(char[] cbuf) 写入字符数组。
- abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
- void write(int c) 写入单个字符。
- void write(String str) 写入字符串。
- void write(String str, int off, int len) 写入字符串的某一部分。
OutputStreamWriter子类
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
创建对象:
- OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。
- OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter。
Writer r1 = new OutputStreamWriter( new FileOutputStream( "F:\\ioTest\\1.txt" ) );
Writer r2 = new OutputStreamWriter( new FileOutputStream( new File("F:\\ioTest\\1.txt") ) );
Writer r3 = new OutputStreamWriter( new FileOutputStream( "F:\\ioTest\\1.txt" ), "utf-8" );
Writer r4 = new OutputStreamWriter( new FileOutputStream( new File("F:\\ioTest\\1.txt"), "utf-8" ) );
FileWriter子类
用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
创建对象:
- FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。
- FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
- FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
- FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
Writer r1 = new FileWriter( new File( "F:\\ioTest\\1.txt" ) ); // 会覆盖原来数据
Writer r2 = new FileWriter( new File( new File("F:\\ioTest\\1.txt"), true ) ); // 追加数据
Writer r3 = new FileWriter( "F:\\ioTest\\1.txt" ) ); // 会覆盖原来数据
Writer r4 = new FileWriter( "F:\\ioTest\\1.txt", true ) ); // 追加数据
BufferedWriter 子类
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
创建对象:
- BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
- BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。
Write w = new BufferedWrite( new FileWrite("F:\\ioTest\\1.txt") ); //高效 会覆盖数据
Write w = new BufferedWrite( new FileWrite("F:\\ioTest\\1.txt",true) ) // 高效 会追加数据
字符流写出案例
try {
// 1、创建对象
// Writer w = new BufferedWriter(new FileWriter("F:\\ioTest\\2.txt")); // 覆盖数据
Writer w = new BufferedWriter(new FileWriter("F:\\ioTest\\2.txt",true)); //追加数据
// 2、写数据
for (int i = 97; i < 123; i++) { // a-z
w.write(i);
}
// 关闭资源
w.close();
} catch (IOException e) {
e.printStackTrace();
}

浙公网安备 33010602011771号