Java中IO字符流详解

目录

一、字符输入流(Reader)

1、Reader类概述

2、Reader类的成员方法(部分)

①abstract  void close()

②int read()

③int read(char[] cbuf)

3、FileReader类

字符输入流的作用:

构造方法:

二、字符输入流读取字符数据

1、字符输入流(FileReader)的使用步骤

2、代码演示

三、字符输出流(Writer)

1、Writer类概述

2、Writer类的成员方法(部分)

①abstract  void close()

②abstract  void flush()

③void write(char[] cbuf)

④abstract  void write(char[] cbuf, int off, int len)

⑤void write(int c)

⑥void write(String str)

⑦void write(String str, int off, int len)

3、FileWriter类

字符输出流的作用:

构造方法:

四、字符输出流的基本使用

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

2、代码演示

代码:

运行结果:

五、字符输出流的续写和换行(跟字符流一样)

1、代码

2、运行结果

六、使用try...catch处理异常

1、代码(JDK1.7之前)

七、JDK7与JDK9处理异常的新特性

1、JDK7

格式:

2、JDK9

格式:


一、字符输入流(Reader)

1、Reader类概述

①是抽象类(抽象类是无法实例化对象的,用其子类);

②是所有字节输出流最顶层的父类;

③定义了一些子类共性的成员方法;

④重点研究子类InputStreamReader的子类FileReader;

 

2、Reader类的成员方法(部分)

①abstract  void close()

关闭该流并释放与之关联的所有资源;

②int read()

读取单个字符;

③int read(char[] cbuf)

将字符读入数组;

 

3、FileReader类

字符输入流的作用:

把硬盘文件中的数据以字符的方式读取到内存中;

构造方法:

FileReader(File file)

在给定从中读取数据的 File 的情况下创建一个新 FileReader;

FileReader(String fileName)

在给定从中读取数据的文件名的情况下创建一个新 FileReader;

构造方法的参数说明:读取文件的数据源,file是file对象,fileName是文件的路径;

构造方法的作用:

①创建一个FileReader对象;

②将FileReader对象指向要读取的文件;

 

二、字符输入流读取字符数据

1、字符输入流(FileReader)的使用步骤

①创建一个FileReader对象,构造方法传入要读取的数据源;

②使用FileReader类中的read方法读取数据;

③释放资源;

 

2、代码演示

package study.io;

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

public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        //①创建一个FileReader对象,构造方法传入要读取的数据源;
        FileReader fileReader = new FileReader("C:\\Users\\Administrator\\Desktop\\test.txt");
        //②使用FileReader类中的read方法读取数据;
        int i = fileReader.read();
        System.out.println(i);//97,若资源读取完毕,同样是返回-1
        //一次读取多个字符
        char[] chars = new char[1024];
        int j = fileReader.read(chars);
        System.out.println("读取到的有效字符个数为:"+j);//2,因为第一次读取完,指针后移了
        System.out.println("读取到的多个字符为:"+ new String(chars));//bc
        //③释放资源;
        fileReader.close();
    }
}

 

三、字符输出流(Writer)

1、Writer类概述

①是抽象类(抽象类是无法实例化对象的,用其子类);

②是所有字节输出流最顶层的父类;

③定义了一些子类共性的成员方法;

④重点研究子类OutputStreamWriter的子类FileWriter;

 

2、Writer类的成员方法(部分)

①abstract  void close()

关闭此流,但要先刷新它;

②abstract  void flush()

刷新该流的缓冲;

③void write(char[] cbuf)

写入字符数组;

④abstract  void write(char[] cbuf, int off, int len)

写入字符数组的某一部分;

⑤void write(int c)

写入单个字符;

⑥void write(String str)

写入字符串;

⑦void write(String str, int off, int len)

写入字符串的某一部分;

 

3、FileWriter类

字符输出流的作用:

把内存中字符数据写入到文件中;

构造方法:

FileWriter(File file)

根据给定的 File 对象构造一个 FileWriter 对象;

FileWriter(String fileName)

根据给定的文件名构造一个 FileWriter 对象;

构造方法的参数说明:读取文件的数据源,file是file对象,fileName是文件的路径;

构造方法的作用:

①创建一个FileWriter对象;

②根据构造方法中传递文件或者文件的路径创建一个文件;

③将FileWriter对象指向创建好的文件;

 

四、字符输出流的基本使用

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

①创建FileWriter对象,构造方法中传入要写入数据的目的地;

②使用FileWriter中的write方法,把数据写入到内存缓冲区(字符转换为字节的过程);

③使用FileWriter中的flush方法,将内存缓冲区中的数据,刷新到文件中;

④释放资源(会先把内存缓冲区中的数据刷新到文件中);

 

2、代码演示

代码:

package study.io;

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

public class FileWriterTest {
    public static void main(String[] args) throws IOException {
        //①创建FileWriter对象,构造方法中传入要写入数据的目的地;
        FileWriter fileWriter = new FileWriter("C:\\Users\\Administrator\\Desktop\\test001.txt");
        //②使用FileWriter中的write方法,把数据写入到内存缓冲区(字符转换为字节的过程);
        fileWriter.write(97);//写入单个字符a
        fileWriter.write("写入一个字符串!");//写入一个字符串
        fileWriter.write(new char[]{'a','b','c'});//写入一个字符数组
        //③使用FileWriter中的flush方法,将内存缓冲区中的数据,刷新到文件中;
        fileWriter.flush();
        //④释放资源(会先把内存缓冲区中的数据刷新到文件中);
        fileWriter.close();
    }
}

运行结果:

 

五、字符输出流的续写和换行(跟字符流一样)

1、代码

package study.io;

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

public class FileWriterTest {
    public static void main(String[] args) throws IOException {
        //①创建FileWriter对象,构造方法中传入要写入数据的目的地;
        FileWriter fileWriter = new FileWriter("C:\\Users\\Administrator\\Desktop\\test001.txt",true);
        //②使用FileWriter中的write方法,把数据写入到内存缓冲区(字符转换为字节的过程);
        fileWriter.write(97);//写入单个字符a
        fileWriter.write("\r\n");//写入单个字符a
        fileWriter.write("写入一个字符串!\r\n");//写入一个字符串
        fileWriter.write(new char[]{'a','b','c'});//写入一个字符数组
        //③使用FileWriter中的flush方法,将内存缓冲区中的数据,刷新到文件中;
        fileWriter.flush();
        //④释放资源(会先把内存缓冲区中的数据刷新到文件中);
        fileWriter.close();
    }
}

2、运行结果

 

六、使用try...catch处理异常

1、代码(JDK1.7之前)

package study.io;

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

public class FileWriterTest {
    public static void main(String[] args) {
        FileWriter fileWriter = null;
        try {
            //①创建FileWriter对象,构造方法中传入要写入数据的目的地;
            fileWriter = new FileWriter("C:\\Users\\Administrator\\Desktop\\test001.txt",true);
            //②使用FileWriter中的write方法,把数据写入到内存缓冲区(字符转换为字节的过程);
            fileWriter.write(97);//写入单个字符a
            fileWriter.write("\r\n");//写入单个字符a
            fileWriter.write("写入一个字符串!\r\n");//写入一个字符串
            fileWriter.write(new char[]{'a','b','c'});//写入一个字符数组
            //③使用FileWriter中的flush方法,将内存缓冲区中的数据,刷新到文件中;
            fileWriter.flush();
        }catch (IOException e){
            System.out.println(e);
        }finally {
            //④释放资源(会先把内存缓冲区中的数据刷新到文件中);
            if(fileWriter!=null) {//若之前就失败,则fileWriter为空,会出现空指针异常,加个判断
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

七、JDK7与JDK9处理异常的新特性

1、JDK7

jdk1.7中try后面增加一个括号(),括号中可以定义流对象,那么这个流对象只在try中有效,try代码块执行完毕后会自动释放;

格式:

try(定义流对象...){
    //可能出现异常的代码
}catch(异常变量 变量名){
    //异常的处理逻辑
}

2、JDK9

JDK1.9中try中可以传入流对象。那么这个流对象只在try中有效,try代码块执行完毕后会自动释放;

格式:

A a = new A();
B b = new B();
try(a,b...){
    //可能出现异常的代码
}catch(异常变量 变量名){
    //异常的处理逻辑
}

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值