📌 字符流中的常用类及基本方法:
- 输入字符流 Reader
- 输出字符流 Writer
○ Reader 的基本方法:
• 读取一个字符并以整数的形式返回, 如果返回-1已到输入流的末尾。
int read() throws IOException
• 读取一系列字符并存储到一个数组buffer, 返回实际读取的字符数, 如果读取前已到输入流的末尾返回-1。
int read( char[] cbuf) throws IOException
• 关闭 void close() throws IOException
○ Writer 的基本方法:
• 向输出流中写入一个字符数据,该字节数据为参数b的16位
void write(int c) throws IOException
• 一个字符类型的数组中的数据写入输出流
void write( char[] cbuf) throws IOException
• 将一个字符类型的数组中的从指定位置(off set)开始的 length个字符写入到输出流
void write( char[] cbuf, int off set, int length) throws IOException
• 关闭 void close() throws IOException
字符流只能读取文本文件
📌 代码测试:
① 我们先创建一个char1.txt文本, 并写入内容进行读写测试
② 通过代码将char1.txt文本的内容读写到char2.txt文本
public static void main(String[] args) throws IOException {FileReader reader =new FileReader("E:/char1.txt");FileWriter writer =new FileWriter("E:/char2.txt");int b = 0;while((b=reader.read())!=-1) {System.out.println(b);//打印字符编码writer.write(b);}reader.close();writer.close();}
字符流读取时以字符为单位,会将读到字节结合编码表转换为一个字符编码
③ 我们可以将每次读取到的字符对应的编码打印出来
④ 成功读写内容到char2.txt文本
📌 上述写法的弊端:
每次运行程序会将之前所读写的内容覆盖带掉,不能做到在原内容的基础上续写
• 解决方法:在字符输出流的对象路径后加上true, 表示可续写
• 此时当我们多次运行程序时, 发现之前的所读写的内容依然存在
📌 那么我们怎样进行换行操作?
public static void main(String[] args) throws IOException {FileReader reader =new FileReader("E:/char1.txt");//保留原来的内容,在原内容基础上向后追加(续写)FileWriter writer =new FileWriter("E:/char2.txt",true);BufferedReader bufferedReader =new BufferedReader(reader);BufferedWriter bufferedWriter =new BufferedWriter(writer);String line = null ;while((line=bufferedReader.readLine())!=null){//只要每次读取不为空,则读取一行bufferedWriter.write(line);//写一行bufferedWriter.newLine();//插入换行符}bufferedReader.close();bufferedWriter.flush();bufferedWriter.close();//记得在读写完毕后关闭通道}
注意: 由于读取一行的方法readLine( )在BufferedReader中,换行方法newLine( )在BufferedWriter类中,所有需要用到缓冲字符输入输出流.
○ 此时当我们多次运行程序时, 会将每次读取到的内容进行换行读写, 便于记录数据