zoukankan      html  css  js  c++  java
  • JAVA基础——IO流字符流

    字符流

    字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为上一篇文章写了,一个Unicode字符占用2个字节,而字节流一次只能操作一个字节。既然Java的口号就是"一次编写、处处运行",那么包含直接的字符输入/输出的支持是必要的。因此就有一些字符输入/输出流,之前已经说明过了,字符流顶层是Reader和Writer这两个抽象类,因此就从这里开始本文。

    Reader

    Reader是定义Java的字符输入流的抽象类,该类的所有方法在出错的情况下都将引发IOException。Reader类中有这些方法:

    方    法 作    用
    abstract void close() 关闭该流并释放与之关联的所有资源
    void mark(int readAheadLimit) 标记流中的当前位置
    boolean markSupported() 判断此流是否支持mark()操作
    int read() 从文件中读取单个字符
    int read(char[] cbuf) 从文件中读取字符到cbuf
    abstract int read(char[] cbuf, int off, int len) 将文件中的字符读入cbuf数组,从off位置开始,读取len个字符。三个read方法在字符可用、发生I/O异常或者已经到达流的末尾前,此方法会一直阻塞
    int read(CharBuffer target) 试图将文件中的字符读入指定的字符缓冲区
    boolean ready() 判断是否准备读取此流
    voi reset() 重置该流
    long skip(long n) 跳过n个字符

    Writer

    Writer是定义字符输出流的抽象类,所有该类的方法都返回一个void值并在出错的条件下引发IOException。Writer类中的方法有:

    方    法 作    用
    Writer append(char c) 将制定字符添加到此writer
    Writer append(CharSequence csq) 将制定字符序列添加到此writer
    Writer append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此writer.Appendable
    abstract void close() 关闭此流,但要先flush()它
    abstract void flush() 刷新该流的缓冲
    void write(char[] cbuf) 将cbuf中的内容写入文件
    abstract void write(char[] cbuf, int off, int len) 将字符数组cbuf中从off开始的len个字节写入文件
    void write(int c) 写入单个字符到文件中
    void write(String str) 写入字符串到文件中
    void write(String str, int off, int len) 写入str从off位置开始的len个字符到文件中

    FileReader和FileWriter

    FileReader类创建了一个可以读取文件内容的Reader类,最常用的构造方法是:

    1、FileReader(String fileName)

    2、FileReader(File file)

    FileWriter创建了一个可以写文件的Writer类,最常用的构造方法是:

    1、FileWriter(String fileName)

    2、FileWriter(String fileName, boolean append)

    3、FileWriter(File file)

    其中第二个构造方法,如果append为true,那么输出是追加到文件结尾的FileWriter类的创建不依赖文件是否存在,在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果试图打开一个只读文件,那么将引发一个IOException。看一下FileWriter和FileReader的使用,现在D盘目录下没有"writer.txt":

    复制代码
    复制代码
    public static void main(String[] args) throws Exception
    {
        File file = new File("D:/writer.txt");
        Writer out = new FileWriter(file);
        // 声明一个String类型对象
        String str = "Hello World!!!";
        out.write(str);
        out.close();
            
        // 读文件操作
        Reader in = new FileReader(file);
        // 开辟一个空间用于接收文件读进来的数据
        char c0[] = new char[1024];
        int i = 0;
        // 将c0的引用传递到read()方法之中,同时此方法返回读入数据的个数
        i = in.read(c0);
        in.close();
            
        if (-1 == i)
        {
            System.out.println("文件中无数据");
        }
        else
        {
            System.out.println(new String(c0, 0, i));
        }
    }
    复制代码
    复制代码

    利用FileWriter和FileReader进行了一次的读写操作,先看一下D盘下是否有"writer.txt",假如有"writer.txt"那"writer.txt"中又是什么:

    看来利用FileWriter写入一个内存中的字符串到文件中是成功了,那么利用利用FileReader读入文件中的内容到内存呢,看一下运行结果:

    Hello World!!!

    打印结果和文件中的内容一致,说明FileReader的操作也成功。

    这就是FileWriter和FileReader的使用,和FileOutputStream和FileInputStream的使用差不多,不过实际操作中一般不会用FileWriter和FileReader

  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/huan-guo/p/8520329.html
Copyright © 2011-2022 走看看