字符流

字符流

使用字节流读取中文文件

1个中文:

GBK:占用两个字节

UTF-8:占用3个字节。

当使用字节流读取文本文件时可能会有一些小问题,就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储,所以java提供了一些字符流,以字符为单位读写数据,专门用于处理文本文件。

字符输入流【Reader】

java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息的内存中,它定义了字符输入流的基本共性功能方法。

  • public void close():关闭此流并释放与此流相关联的任何系统资源。
  • public int read():从输入流读取一个字符。
  • public int read(char[] cbuf):从输入流中读取一些字符,并将它们存储到字符数组cbuf中。

java.io.FileReader extends InputStreamReader extends Reader

FileReader:文件字符输入流

作用:把硬盘文件中的数据以字符的方式读取到内存中。

构造方法:

​ FileReader(String fileName)

​ FileReader(File file)

​ 参数:读取文件文件的数据源

​ String fileName;文件的路径

​ File file:一个文件

​ FileReader构造方法的作用:

​ 1.创建一个FileReader对象。

​ 2.会把FileReader对象指向要读取的文件。

字符输入流的使用步骤:

  1. 创建FileReader对象,构造方法中绑定要读取的数据源。
  2. 使用FileReader对象中的方法read读取文件。
  3. 释放资源。

代码演示:

package day7;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class FileReader01 {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader(new File("C:\\a\\b.txt"));
        //读取单个字符
//        int len = 0;
//        while ((len = fr.read())!=-1){
//            System.out.print((char) len);
//        }

        //读取多个字符
        char[] cs =new char[1024];
        int len = 0;
        while ((len = fr.read(cs))!=-1){
            System.out.println(new String(cs,0,len));
        }
        fr.close();
    }
}

字符输出流【writer】

java.io.writer:字符输出流,是所有字符输出流的最顶层的父类,是一个抽象类。

共性的成员方法:

  • void write(int c)写入单个字符。
  • void write(char[] cbuf)写入字符数组。
  • abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
  • void write(String str)写入字符
  • void write(String str,int off,int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
  • void flush()刷新该流的缓冲。
  • void close()关闭此流,但要先刷新它。

java.io.FileWrite extends OutputStreamwriter extends writer

FileWriter:文件字符输出流

作用:把内存中字符数据写入到文件中。

构造方法:

FileWriter(File file)根据给定的File对象构造一个FileWriter对象。

FileWriter(String fileName)根据给定的文件名构造一个FileWriter对象。

参数:写入数据的目的地。

String fileName:文件的路径。

File file:是一个文件。

构造方法的作用:

  1. 会创建一个FileWriter对象。
  2. 会根据构造方法中传递的文件/文件的路径,创建文件。
  3. 会把FileWriter对象指向创建好的文件。

字符输出流的使用步骤(重点):

  1. 创建一个FileWriter对象,构造方法中绑定要写入数据的目的地。
  2. 使用FileReader中的方法write,吧数据写入到内存缓冲区中(字符转换为字节的过程)
  3. 使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中。
  4. 释放资源(会先把内存缓冲区的数据刷新到文件中)

写入字符数据

代码演示:

package day7;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class WriterDemo02 {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("C:\\a\\d.txt");
        fw.write("你");
        fw.write("好");
        fw.flush();
        FileReader fr = new FileReader("C:\\a\\d.txt");
        int len = 0;
        while((len = fr.read())!=-1){
            System.out.println((char)len);
        }
        fr.close();
    }
}

Flush方法和close方法的区别

flush:刷新缓冲区,流对象可以继续使用。

close:先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用了。

字符输出流写数据的其他方法

  • void write(char[] cbuf)写入字符数组。
  • abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
  • void write(String str)写入字符串。
  • void write(String str,int off,int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数。

代码演示:

package day7;

import java.io.FileWriter;
import java.io.IOException;

public class Demo03 {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("C:\\a\\e.txt");
        char[] cs = {'a','b','c','d'};
        // void write(char[] cbuf)写入字符数组。
        fw.write(cs);

        // void write(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
        fw.write(cs,1,3);

        // void write(String str)写入字符串。
        fw.write("方舟安全团队");
        
        fw.close();
    }
}

字符输出流的续写和换行

续写:追加写,使用两个参数的构造方法。

FileWriter(String fileName,boolean append)

FileWriter(File file,boolean append)

参数:

String fileName,File file:写入数据的目的地。

Boolean append;续写开关,true:不会创建新的文件覆盖源文件,可以续写;false:创建新的文件覆盖源文件。

换行:

windows:\r\n

linux:/n

mac:/r

代码演示:

package day7;

import java.io.FileWriter;
import java.io.IOException;

public class Demo04 {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("C:\\a\\f.txt",true);
        for (int i = 0; i < 10; i++) {
            fw.write("方舟"+i+"\r\n");
        }
        fw.close();
    }
}
posted @ 2020-11-07 23:40  小明-o3rr0r  阅读(87)  评论(0编辑  收藏  举报