JAVA IO字符流的使用

19 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

字符输入

FileReader:文件字符输入流,以内存为基准,把磁盘文件的数据以字符的形式读入到内存,读取文本文件内容到内存中去

构造器:

  • public FileReader(File file):创建一个字符输入流与源文件对象接通。
  • public FileReader(String filePath):创建一个字符输入流与源文件路径接通。

方法:

  • public int read():读取一个字符的编号返回,读取完毕返回 -1
  • public int read(char[] buffer):读取一个字符数组,读取多少个就返回多少个,读取完毕返回 -1

结论:

  • 字符流一个一个字符的读取文本内容输出,可以解决中文读取输出乱码的问题,适合操作文本文件,但是一个一个字符的读取文本内容性能较差
  • 字符流按照字符数组循环读取数据,可以解决中文读取输出乱码的问题,而且性能也较好

字符流不能复制图片,视频等类型的文件。字符流在读取完了字节数据后并没有直接往目的地写,而是先查编码表,查到对应的数据就将该数据写入目的地。如果查不到,则码表会将一些未知区域中的数据去 map 这些字节数据,然后写到目的地,这样的话就造成了源数据和目的数据的不一致。

public class FileReaderDemo01{//字符
    public static void main(String[] args) throws Exception {
        // 创建一个字符输入流管道与源文件路径接通
        Reader fr = new FileReader("Demo/src/test.txt");
        int ch;
        while((ch = fr.read()) != -1){
            System.out.print((char)ch);
        }
    }
}
public class FileReaderDemo02 {//字符数组
    public static void main(String[] args) throws Exception {
        Reader fr = new FileReader("Demo/src/test.txt");
        
        char[] buffer = new char[1024];
        int len;
        while((len = fr.read(buffer)) != -1) {
            System.out.print(new String(buffer, 0 , len));
        }
    }
}

字符输出

FileWriter:文件字符输出流,以内存为基准,把内存中的数据按照字符的形式写出到磁盘文件中去

构造器:

  • public FileWriter(File file):创建一个字符输出流管道通向目标文件对象(覆盖数据管道)
  • public FileWriter(String filePath):创建一个字符输出流管道通向目标文件路径
  • public FileWriter(File file, boolean append):创建一个追加数据的字符输出流管道通向文件对象(追加数据管道)
  • public FileWriter(String filePath, boolean append):创建一个追加数据的字符输出流管道通向目标文件路径

方法:

  • public void write(int c):写一个字符出去
  • public void write(char[] buffer):写一个字符数组出去
  • public void write(String c, int pos, int len):写字符串的一部分出去
  • public void write(char[] buffer, int pos, int len):写字符数组的一部分出去
  • fw.write("\r\n"):换行

读写字符文件数据建议使用字符流

Writer fw = new FileWriter("Demo/src/test.txt");
fw.write(97);   // 字符a
fw.write('b');  // 字符b
fw.write("Java是最优美的语言!");
fw.write("\r\n");
fw.close;