文件内容读写-数据流

前言:

在Java中操作文件主要分为:1.文件系统的操作(File类)、2.文件内容的操作(流对象)。

在上一节内容中针对File类进行了介绍,本节主要介绍Java中对File类对象内容的读与写操作(数据流)。

序列:文件/IO - 003

1.数据流

1.1流对象

在创建完File类对象文件后,就需要对文件进行内容的读写操作。

在Java语言中,针对文件内容读写的操作,需要使用到数据流。Java语言性质中一切皆对象,所以数据流会抽象成数据流对象,简称为:流对象

流对象并不只有一个,针对不同的文件类型,流对象分为两种,字节流字符流对象。如下所示:

  1. 字节流:对二进制文件内容进行读写操作,API:InputStream/OutputStream;
  2. 字符流:对文本文件内容进行读写操作,API:Reader/Writer。

针对二进制文件和文本文件,在文件/IO第一节中已经介绍。

InputStream/OutputStream/Reader/Writer这四个类都是Java标椎库中的抽象类,不能直接实例化对象,需要借助其他继承的子类来实例化数据流对象。

1.2输入/输出流

对文件内容的操作分为读与写,但是读与写是以电脑CPU为参照,不是以文件为参照,所以“读”为输入流操作,而“写”为输出流操作

  • InputStream/Reader类表示“读”操作,是输入流;
  • OutputStream/Writer类表示“写”操作,是输出流。

文件内容读写-数据流_第1张图片

输入与输出流对象具体操作见下文。

2.字符流

2.1Reader

因为Reader类是抽象类,不能实例化对象。但是Java标椎库中有继承Reader类现成的子类,可以直接使用并实例化对象->FileReader类。

创建FileReader类对象的过程就是“打开文件”的过程,如果文件不存在就会打开失败。

        File file = new File("D:/JavaEE/test.txt");
        file.createNewFile();//创建file对象
        Reader reader = new FileReader("D:/JavaEE/test.txt");//创建read对象,用于读取

在FileReader类中有三个read()读方法,用法分别如下:

方法 说明
read() 一次读取一个字符
read(char[] cbuf) 一次读取若干字符,会把cbuf数组尽量填充满
read(char[] cbuf, int off, int len) 一次读取若干字符,会把cbuf数组从off到len范围内尽量填满

1、read()无参方法:返回值为int类型,不是char类型,文件为空返回-1。

原因是因为Reader为字符流操作,为了读取不同的编码格式下的字符,所以read()方法返回int类型的值。可以通过强制转换为char类型的可读字符:

char n = (char) reader.read();//强制类型转换,将读到的值转换为可读字符

2、read()有参方法:返回值为int类型,表示读取到的字符个数,文件为空返回-1。

cbuf数组为输出型参数,给read()方法传入一个空的数组,然后由read()方法内部,对数组内容进行填充。填充满了就停止,填充不满后续空间会空着。

打印读取到的内容时,可以根据read()方法返回的字符个数进行for循环打印,如下。

        char[] cbuf = new char[200];
        int i = reader.read(cbuf);//返回值是读取到的字符个数
        for (int j = 0; j < i; j++) {
            System.out.print(cbuf[j]);//打印读取到的内容
        }

3、close()方法:

2.2Writer

3.字节流

你可能感兴趣的:(JavaEE,(初阶),开发语言,java,java-ee,jvm)