Java学习篇之IO流(字符流)

时间:2023-02-24 19:02:52

  在Java学习篇之IO流(字节流)一文中,总结的是IO流中字节流的知识点,我们会发现,对于字节流来说,不管是读还是写,都是以字节为单位来操作的。假如我们读取拥有中文的文件时,使用的是字节流,那么读取到的都是一个一个的字节,还需要把这些字节拿去查阅对应的编码表,才能够得到与之对应的字符。这样做未免也太麻烦了,所以,这篇博客就介绍下专门操作字符的功能流对象——字符流。

  字符输入流Reader

    读方法

      int read() 读取1个字符
        int read(char[] c) 读取字符数组

    子类对象 FileReader的构造方法

      FileReader(File file)

        FileReader(String fileName)

        作用:绑定数据源

    实例

import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) throws IOException {
// 创建一个字符输入流对象,必须明确数据源
FileReader fr=new FileReader("D:\\测试.txt");
//定义一个字符数组
char[] ch=new char[1024];
int len=0;
while((len=fr.read(ch))!=-1){
System.out.println(new String(ch,0,len) );
}
fr.close();
}
}


  字符输出流Writer

    写方法

      write(int c) 写1个字符

      write(char[] c)写字符数组

      write(char[] c,int  off,int  len)字符数组一部分,开始索引,写几个

      write(String s) 写入字符串

    子类对象 FileWriter的构造方法

      FileWriter(File file)

        FileWriter(String FileName)

        作用:写入的数据目的

    实例

import java.io.FileWriter;
import java.io.IOException;
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter("D:\\说实话.txt");
//写1个字符
fw.write(115); //写入的是字母s
fw.flush();
//写一个字符数组
char[] ch={'u','n','l','i','n','a','n'};
fw.write(ch);
fw.flush();
//选取字符数组的一部分字符写入
fw.write(ch, 4, 3);
fw.flush();
//写字符串
fw.write("我真的是一个淑女啊!");
fw.flush();
fw.close();
}
}

  PS:上述运行结果体现了笔者的自信……哈哈哈……

    flush()和close()的区别

    flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
    close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后再关闭流,流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。