Java--字符流

99封情书 提交于 2020-01-19 04:48:59

字符输入流【Reader】

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

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

FileReader类【Reader】

java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区

小贴士:

  1. 字符编码:字节与字符的对应规则。Windows系统的中文编码默认是GBK编码表。
    idea中UTF-8
  2. 字节缓冲区:一个字节数组,用来临时存储字节数据
  • FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象

  • FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称

public class FileReaderConstructor throws IOException{
    public static void main(String[] args) {
     // 使用File对象创建流对象    
        File file = new File("a.txt");
        FileReader fr = new FileReader(file);
     
        // 使用文件名称创建流对象
        FileReader fr = new FileReader("b.txt");
    }
}

读取字符数据

  1. 读取字符-read 方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1 ,循环读取
public class FRRead {
    public static void main(String[] args) throws IOException {
       // 使用文件名称创建流对象  
       FileReader fr = new FileReader("read.txt"); 
       // 定义变量,保存数据  
        int b ;
        // 循环读取
        while ((b = fr.read())!=1) {
            System.out.println((char)b);
        }
// 关闭资源        
        fr.close();
    }
}

小贴士:虽然读取了一个字符,但是会自动提升为int类型。

  1. 使用字符数组读取: read(char[] cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数,
    读取到末尾时,返回 -1
public class FRRead {
    public static void main(String[] args) throws IOException {
       // 使用文件名称创建流对象  
       FileReader fr = new FileReader("read.txt"); 
       // 定义变量,保存有效字符个数  
        int len ;
        // 定义字符数组,作为装字符数据的容器
         char[] cbuf = new char[2];
        // 循环读取
        while ((len = fr.read(cbuf))!=1) {
            System.out.println(new String(cbuf));
        }
// 关闭资源        
        fr.close();
    }
}

获取有效的字符改进

public class FISRead {
    public static void main(String[] args) throws IOException {
       // 使用文件名称创建流对象  
       FileReader fr = new FileReader("read.txt"); 
       // 定义变量,保存有效字符个数  
        int len ;
        // 定义字符数组,作为装字符数据的容器
        char[] cbuf = new char[2];
        // 循环读取
        while ((len = fr.read(cbuf))!=1) {
            System.out.println(new String(cbuf,0,len));
        }
     // 关闭资源    
        fr.close();
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!