【04 核心类库 3. IO流:分类和体系结构】字符流

3. IO流

3.1 基本分类

  • 按照读写数据的基本单位不同,分为 字节流字符流
    • 其中字节流主要指以字节为单位进行数据读写的流,可以读写任意类型的文件
    • 其中字符流主要指以字符(2个字节)为单位进行数据读写的流,只能读写文本文件
  • 按照读写数据的方向不同,分为 输入流 和 输出流(站在程序的角度)。
    • 其中输入流主要指从文件中读取数据内容输入到程序中,也就是读文件。
    • 其中输出流主要指将程序中的数据内容输出到文件中,也就是写文件。
  • 按照流的角色不同分为节点流和处理流。
    • 其中节点流主要指直接和输入输出源对接的流。
    • 其中处理流主要指需要建立在节点流的基础之上的流。

3.2 体系结构

在这里插入图片描述
在这里插入图片描述

3.3 相关流的详解

3.3.1 字符流

3.3.1.1 FileWriter类(重点)
(1)基本概念

java.io.FileWriter类主要用于将文本内容写入到文本文件。

(2)常用的方法
方法声明功能介绍
FileWriter(String fileName)根据参数指定的文件名构造对象
FileWriter(String fileName, boolean append)以追加的方式根据参数指定的文件名来构造对象
void write(int c)写入单个字符
void write(char[] cbuf, int off, int len)将指定字符数组中从偏移量off开始的len个字符写入此文件输出流
void write(char[] cbuf)将cbuf.length个字符从指定字符数组写入此文件输出流中
void flush()刷新流
void close()关闭流对象并释放有关的资源
public class FileWriterTest {
    public static void main(String[] args) {
        //选中代码块,使用快捷键 crl+alt+t 可以自动生成捕获异常的代码
        FileWriter fw= null;

        try {
            //1.构造FileWriter类型的对象并关联文件
            //若文件不存在,则该流会自动创建新的空文件
            //若文件存在,该流会清空原有数据内容
            fw = new FileWriter("e:/a.txt");
            //以追加的方式创建对象关联文件
            //若文件不存在则创建新的空文件。若文件存在,则保留原有的数据内容
//            fw = new FileWriter("e:/a.txt",true);

            //2.通过流对象写入文件,每当写入一个字符文件中的读写位置则往后移一位
            fw.write('a');

            //准备一个字符数组
            char[] cArr=new char[] {'h','e','l','l','o'};
            //将字符数组的一部分写入文件
            //写入从下标为1开始的3位字符
            fw.write(cArr,1,3);
            //将字符数组全部写入
            fw.write(cArr);

            //刷新
            fw.flush();

            System.out.println("数据写入成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {         //无论是否发生异常,finally都会运行

            //3.关闭流对象并释放相关资源
            if(null!=fw) {  //如果fw不等于null就关闭
                try {
                    fw.close();             //在new对象的过程中发生错误,对象无法new出来,会发生空指针异常
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
3.3.1.2 FileReader类(重点)
(1)基本概念

java.io.FileReader类主要用于从文本文件读取文本数据内容。

(2)常用的方法
方法声明功能介绍
FileReader(String fileName)根据参数指定的文件名构造对象
int read()读取单个字符的数据并返回,返回-1表示读取到末尾
int read(char[] cbuf, int offset, int length)从输入流中将最多len个字符的数据读入一个字符数组中,返回读取到的字符个数,返回-1表示读取到末尾
int read(char[] cbuf)从此输入流中将最多 cbuf.length 个字符的数据读入字符数组中,返回读取到的字符个数,返回-1表示读取到末尾
void close()关闭流对象并释放有关的资源
		FileReader fr= null;

        try {
//1.构造对象关联文件
            fr = new FileReader("e:/a.txt");
//2.读取文件内容并打印
           /* int res=fr.read();
            System.out.println("读取到的单个字符是:"+(char)res);*/
            
            /*int res=0;
            while ((res=fr.read())!=-1) {       //当res=-1时,文件读取到末尾位置
            System.out.println("读取到的单个字符是:"+(char)res);
            }*/

            //准备一个字符数组来存取数据内容
            char[] cArr=new char[5];
            //期望读满数组中一部分内容,读取文件中的3个字符从下标为1的位置开始存取
          /*  int res=fr.read(cArr,1,3);
            System.out.println("字符的个数为:"+res);  //3
            for (char cs:cArr) {
                System.out.println("读取到的单个字符为:"+(char)cs);//啥也没有 a e l 啥也没
            }*/
            //期望读满整个数组
            int res=fr.read(cArr);
            System.out.println("字符的个数为:"+res);  //5
            for (char cs:cArr) {
                System.out.println("读取到的单个字符为:"+(char)cs);//a e l l h
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //3.关闭流对象
            if (null!=fr){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
字符流实现文件的复制
public class FileCopyTest {
    public static void main(String[] args) {
        FileReader fr= null;
        FileWriter fw= null;
        try {
            //1.创建一个FileReader类型的对象并与文件关联
            fr = new FileReader("e:/a.txt");
            //2.创建一个FileWriter类型的对象并与文件关联
            fw = new FileWriter("e:/b.txt");
            //3.从输入流当中读取文件并写入输出流中           //输入流是读文件       //输出流是写文件
            System.out.println("正在拷贝...");
            int res=0;
            while ((res=fr.read())!=-1) {
                fw.write(res);
            }
            System.out.println("文件拷贝成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        //4.关闭流文件并释放相关资源
            try {
                if (null!=fw)
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (null!=fr)
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
3.3.1.3 BufferedWriter类(重点)
(1)基本概念

java.io.BufferedWriter类主要用于写入单个字符、字符数组以及字符串到输出流中。

(2)常用的方法
方法声明功能介绍
BufferedWriter(Writer out)根据参数指定的引用来构造对象
BufferedWriter(Writer out, int sz)根据参数指定的引用和缓冲区大小来构造对象
void write(int c)写入单个字符到输出流中
void write(char[] cbuf, int off, int len)将字符数组cbuf中从下标off开始的len个字符写入输出流中
void write(char[] cbuf)将字符串数组cbuf中所有内容写入输出流中
void write(String s, int off, int len)将参数s中下标从off开始的len个字符写入输出流中
void write(String str)将参数指定的字符串内容写入输出流中
void newLine()用于写入行分隔符到输出流中
void flush()刷新流
void close()关闭流对象并释放有关的资源
3.3.1.4 BufferedReader类(重点)
(1)基本概念

java.io.BufferedReader类用于从输入流中读取单个字符、字符数组以及字符串。

(2)常用的方法
方法声明功能介绍
BufferedReader(Reader in)根据参数指定的引用来构造对象
BufferedReader(Reader in, int sz)根据参数指定的引用和缓冲区大小来构造对象
int read()从输入流读取单个字符,读取到末尾则返回-1,否则返回实际读取到的字符内容
int read(char[] cbuf, int off, int len)从输入流中读取len个字符放入数组cbuf中下标从off开始的位置上,若读取到末尾则返回-1,否则返回实际读取到的字符个数
int read(char[] cbuf)从输入流中读满整个数组cbuf
String readLine()读取一行字符串并返回,返回null表示读取到末尾
void close()关闭流对象并释放有关的资源
public class BufferedCharCopyTest {
    public static void main(String[] args) {
        BufferedReader br= null;
        BufferedWriter bw= null;
        try {
//1.创建一个BufferedReader类型的对象并关联文件
            br = new BufferedReader(new FileReader("e:/a.txt"));
//2.创建一个BufferedWriter类型的对象并关联文件
            bw = new BufferedWriter(new FileWriter("e:/b.txt"));
//3.从输入流中读取一行字符串并写入输出流中
            System.out.println("拷贝中...");
            String str=null;
            while ((str=br.readLine())!=null) {
                bw.write(str);
                bw.newLine();   //写入分隔符;        当前系统的分隔符是:      \r  \n
            }
            System.out.println("拷贝成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
//4.关闭流对象
        if (null!=br){
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (null!=bw){
            try {
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        }
    }
}
3.3.1.5 PrintWriter类
(1)基本概念

java.io.PrintWriter类主要用于将对象的格式化形式打印到文本输出流。

(2)常用的方法
方法声明功能介绍
PrintWriter(Writer out)根据参数指定的引用来构造对象
void print(String s)将参数指定的字符串内容打印出来
void println(String x)打印字符串后并终止该行
void flush()刷新流
void close()关闭流对象并释放有关的资源
3.3.1.6 转换流
(1) OutputStreamWriter类
  • 基本概念
    java.io.OutputStreamWriter类主要用于实现从字符流到字节流的转换。

  • 常用的方法

    方法声明功能介绍
    OutputStreamWriter(OutputStream out)根据参数指定的引用来构造对象
    OutputStreamWriter(OutputStream out, String charsetName)根据参数指定的引用和编码构造对象
    void write(String str)将参数指定的字符串写入
    void flush()刷新流
    void close()用于关闭输出流并释放有关的资源
(2)InputStreamReader类
  • 基本概念
    java.io.InputStreamReader类主要用于实现从字节流到字符流的转换

  • 常用的方法

    方法声明功能介绍
    InputStreamReader(InputStream in)根据参数指定的引用来构造对象
    InputStreamReader(InputStream in, String charsetName)根据参数指定的引用和编码来构造对象
    int read(char[] cbuf)读取字符数据到参数指定的数组
    void close()用于关闭输出流并释放有关的资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江桥诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值