java io流常用接口_Java基础--常用API--IO流相关API

一、IO流

1、定义:

IO流指的是Input/Output流,即输入流/输出流。

输入流:将外界信息写入程序,即从外界获取信息,属于读操作。

输出流:将程序数据发送给外界,即向外界传输数据,属于写操作。

流一定要关闭,否则可能会出现一些异常。

2、分类:

(1)按照功能划分:

输入流:只能读数据,不能写数据。

输出流:只能写数据,不能读数据。

(2)按照处理单元划分:

字节流:读写字节,基类为InputStream/OutputStream。

字符流:读写字符,基类为Reader/Writer。(底层基于字节流进行操作,自动搜寻指定的编码集合并转换)

(3)按照角色划分:

节点流(低级流):直接从外部设备中读写数据。

处理流(高级流):处理一个已存在的流,不单独存在。

3、常用类与接口:

JAVA中I/O处理的相关类库主要存放在 java.io 包中。

基于字节操作的 I/O 类:InputStream 和 OutputStream

基于字符操作的 I/O 类:Reader 和 Writer

基于磁盘操作的 I/O 类:File

关闭I/O流的接口:Closeable

刷新I/O流的接口:Flushable

序列化接口:Serializable

二、字节流

1、字节输入流:

46901d5c0b99228e6303e5974c07aa48.png

字节输入流的基类是InputStream,常用的子类是FileInputStream、BufferedInputStream。

(1)、InputStream

所有字节输入流的父类。

常用方法:

int read()// 读取并返回1字节数据,若返回-1,表示读到了输入流的末尾。

int read(byte[] b)// 将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。

int read(byte[] b, int off, int len)//将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾,off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。

long skip(long n)// 跳过和丢弃此输入流中数据的n个字节

void close()// 关闭此输入流并释放与该流关联的所有系统资源。

(2)、FileInputStream

文件字节输入流,低级流。所有文件在系统中均以字节的形式保存,可以使用FileInputStream去读取保存在硬盘上的字节序列。

在创建时,将文件名作为构造参数来创建FileInputStream,从而与文件间建立起字节流传输通道。

通过read()、read(byte[])、read(byte[], int begin, int len)三种方法从字节流中读取一个字节或一组字节。

常用方法:

继承并重写父类(InputStream)的方法。

构造方法:

FileInputStream(File file)//通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定

FileInputStream(String name) //通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径name指定

样例:importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;public classFISDemo{public static voidmain(String[] args) {

FileInputStream fis= null;try{//注:此处的test.txt由自己新建,没有的话会报异常的,此处我在文件内部写了 “hello world”。

fis = new FileInputStream("src" + File.separator + "test.txt");//与文件建立个字节传输通道

byte[] b = new byte[1024];//用于保存从文件读取的字节

try{

System.out.println("开始读取文件");int len = 1;while ((len = fis.read(b)) != -1) {//循环读取文件

String str = new String(b, "utf-8");//将字节数组转为字符串

System.out.println(str);//输出

}if (len == -1) {

System.out.println("文件读取完毕");

}

}catch(IOException e) {

e.printStackTrace();

System.out.println("读取文件异常");

}

}catch(FileNotFoundException e) {

e.printStackTrace();

System.out.println("文件异常");

}finally{try{

fis.close();//关流

} catch(IOException e) {

e.printStackTrace();

System.out.println("系统异常");

}

}

}

}

结果:

开始读取文件

hello world

你好

文件读取完毕

(3)、BufferedInputStream

带缓冲的字节输入流,高级流。若直接从文件中存取字节流,则可能受硬件的影响导致传输速度慢,解决办法:先在内存中建立一个缓冲区,每次将字节流从硬件中读取到缓冲区中,然后从内存中读取字节流。由于计算机与内存的交互速度比磁盘的交互速度快,所以效率会提高。

常用方法:

继承并重写父类(InputStream)的方法。

构造方法:

BufferedInputStream(InputStream in)//创建一个BufferedInputStream并保存其参数,即输入流in,以便将来使用。

BufferedInputStream(InputStream in, int size) //创建具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流in以便将来使用

样例:

FileInputStream fis= new FileInputStream("src" + File.separator + "test.txt");//与文件建立个字节传输通道

BufferedInputStream bis = new BufferedInputStream(fis);//用于操作字节流

其余操作与FileInputStream类似

2、字节输出流

74c4935eb5629c8e46db9a19904edced.png

字节输入流的基类是OutputStream,常用的子类是FileOutputStream、BufferedOutputStream。

(1)、OutputStream

所有字节输出流的父类。

常用方法:

void write(byte[] b)// 将b.length个字节从指定的byte数组写入此输出流

void write(byte[] b, int off, int len)// 将指定byte数组中从偏移量off开始的len个字节写入此输出流

void write(int b)// 将1字节写入此输出流

void close() // 关闭此输出流并释放与此流有关的所有系统资源

void flush() // 刷新此输出流并强制写出所有缓冲的输出字节

(2)、FileOutputStream

文件字节输出流&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值