javaI/O|day1.javaI/O流、字节流、字符流、File类

javaI/O流

定义

I/O流(Input/Output)流,即输入/输出流,是java中实现输入/输出的基础,他可以方便实现数据的输入/输出操作。

分类

根据不同的方式进行分类

根据操作数据单位不同可以分为字节流和字符流

字节流

定义

在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流。

简述

InputStream被看成一个输入管道,OutputStream被看成一个输出管道,数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。

分类

InputStream

OutputStream

缓冲区

定义

在文件拷贝过程中,通过以字节形式逐个拷贝,效率很低,因此可以定义一个字节数组缓冲区,在拷贝文件时,就可以一次性读取多个字节的数据。

使用方法

  1. 创建输入输出流,关联数据源和数据目的
FileInputStream fis = new FileInputStream("D:\\a.flv");
FileOutputStream fos = new FileOutputStream("D:\\b.flv");
  1. 创建字节缓冲区
byte[] bys = new byte[1024];
  1. 在读取的过程中,将数据写出到数据目的
        int len;
        while((len = fis.read(bys))!=-1){
            //3.写出的时候,从数组容器中取出,0-len(有效字节个数)
            fos.write(bys,0,len);
        }
  1. 关闭资源
fis.close();
fos.close();
  1. 使用read()

read()按字节读取,读到-1,结束读取

字节缓冲流

定义

IO中还提供了两个字节缓冲流来提高文件拷贝效率:BufferedInputStream 和 BufferedOutputStream。

特点

由于两个流对象中,内置了字节(数组) ,从而提高IO流的读写效率。

使用

  1. 创建字节缓冲,输入输出流

  2. 读写操作

  3. 关闭资源

过程

数据源(源设备)——>FileInputStream(字节流)——>BufferedInputStream(字节缓冲流)——>JAVA(应用程序)——>BufferedOutputStream(字节缓冲流)——>FileOutputStream(字节流)——>数据目的(目标设备)

字符流

定义

JDK还提供了用于实现字符操作的字符流,同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader 和 Writer。

作用

操作纯文本文件时,可以解决乱码问题

注意

字符流只能操作纯文本文件

如果字符输出流没有调用close方法、flush方法的话,数据将不会写出到文件中

原理

字符流底层实际上是通过(字节流+编码表)的形式进行读取的,在读取之后,会根据平台默认码表决定一次读取多少个字节,并在内存中转换为字符。 GBK ——> 一个中文占2个字节 UTF-8 ——> 一个中文占3个字节

流的主要方法
  1. flush方法是将数据刷出到文件中去,刷出后可以继续调用write方法写出

  2. close方法的主要功能是关闭流释放资源,同时也具有刷出数据的效果

  3. close方法调用结束后,不能再调用write方法写出数据

readLine()按行读取,读到null,结束读取

字符缓冲流

BufferedInputStream

BufferedOutputStream

根据流传输方向不同可以分为输入流和输出流

根据功能不同可以分为节点流和处理流

结构

  • InputStream
  • OutputStream
  • Reader
  • Writer

转换流(字节流转换字符流)

作用

转换流可以按照指定的编码表读写数据

说明

提供了两个类用于实现将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter

(1)InputStreamReader是Reader的子类,它可以将一个字节输入流转换成字符输入流,方便直接读取字符。

(2)OutputStreamWriter是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符。

使用方法

InputStreamReader isr = new InputStreamReader(new FileInputStream(“b.txt”),“utf-8”);

File类

说明

File类用于封装一个路径,这个路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径。封装的路径可以指向一个文件,也可以指向一个目录,在File类中提供了针对这些文件或目录的一些常规操作。

构造方法

  1. File(String pathname) 通过指定的一个字符串类型的文件路径来创建一个新的File对象
  2. File(String parent,String child) 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
  3. File(File parent,String child) 根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象
  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值