Java学习日志-IO流

本文为个人学习总结,如内容有误,请大佬指出。

何谓IO流

IO即Input和Output,就是输入输出也就是读和写的意思。在Java中将程序对文件的读和写这个过程称作流。

流的分类

根据数据传输的方向(对于程序而言)可分为输入流输出流,根据读取的数据类型可分为 字节流字符流,从流的功能划分为节点流和处理流。

输入流和输出流
  1. 输入流
    在程序与文件之间创建一个管道,让文件的数据能够流向程序,即读。
  2. 输出流
    在程序与文件之间创建一个管道,让程序的数据能够流向文件,即写。

管道为单向的,确认流向后不能改变,即想要对一个文件同时进行读写操作时,需要分别创建输入流和输出流两个管道。(RandomAccessFile例外,它一个就能够对文件进行读写操作)

字节流和字符流
字节流

字节流一般用于操作二进制文件,对单个字节进行读写。:

  • java.io.InputStream(所有字节输入流的超类)
  • java.io.OutputStream(所有字节输出流的超类)
常见子类
  • FileInputStream
  • FileOutputStream
  • ByteArrayInputStream
  • ByteArrayOutputStream
  • BufferedInputStream
  • BufferedOutputStream
InputStream常见方法
  • close()关闭流,完成读取操作后需要关流
  • read()读取一个字节,并返回其值
  • read(byte[] b)从源文件读取最多数组b长度的字节,并返回真实读取的字节数
  • available()返回源文件可读取的长度
  • skip(long n)跳过n个字节进行数据的读取
OutputStream常见方法
  • close()关闭流
  • write(byte[] b)向目标文件写入数组b长度的字节
  • write(byte[] b, int off, int len)写入数组b里从off到off+len的数据
  • write(int b)写入一个字节b
  • flush()刷新流,强制将缓冲的字节写出(如果不刷新,在流未关闭前数据不会写到文件里)

使用方法:

File() f1 = new File("这里写入需要读取的文件的绝对路径");
File() f2 = new File("这里写入需要写入的文件的绝对路径");
//根据源文件创建输入流
InputStream is = new FileInputStream(f1);
//根据目标文件创建输出流
OutputStream os = new FileOutputStream(f2);
//获取源文件可读长度
int size = is.available();
//读取一个字节
int data1 = read();
//声明一个固定长度的缓冲数组
byte[] data2 = new byte[1024];
//临时存放读取长度
int len = 0;
//循环读取目标文件
while((len = is.read(data2)) != -1){
	//将从源文件读到的数据写入目标文件(还未被写入)
	os.write(data2, 0, len);
	//刷新流,释放缓冲,将数据写入文件
	os.flush();
}
//关闭流
os.close();
is.close();
字符流

一般用于读写纯文本文件,对单个字符进行读写,一个字符占两个字节

  • java.io.Reader字符输入流的抽象超类
  • java.io.Writer字符输出流的抽象超类
常见子类
  • FileReader
  • FileWriter
  • InputStreamReader
  • InputStreamWriter
  • BufferedReader
  • BufferedWriter
Reader常见方法
  • close()关流
  • read()从源文件读一个字符并返回其值
  • read(char[] c)读取字符数组c长度的数据,返回实际读取长度
  • read(char[] c, int off, int len)读取len长度的数据储存到字符数组c从off到off+len的位置
Writer常见方法
  • close()关流
  • flush()刷新流,强制将缓冲的字节写出(如果不刷新,在流未关闭前数据不会写到文件里)
  • write(char c)写一个字符
  • write(String s)写一个字符串
  • write(char[] c)写入字符数组c中的数据
  • write(char[] c, int off, int len)写入字符数组c里从off到off+len的数据

用法和字节流差不多

处理流
转换流
  • InputStreamReader
  • OutputStreamWriter

使用方法:

File() f1 = new File("这里写入需要读取的文件的绝对路径");
File() f2 = new File("这里写入需要写入的文件的绝对路径");
//根据源文件创建输入流
InputStream is = new FileInputStream(f1);
//根据目标文件创建输出流
OutputStream os = new FileOutputStream(f2);
//将文件字节输入流包装为字符输入流
InputStreamReader isr = new InputStreamReader(is);
//将文件字节输出流包装为字符输出流
OutputStreamWriter osw = new OutputStreamWriter(os);
//一般情况有字符输入输出流直接用就好了,不用转换这么麻烦
缓冲流

用来包装字节的缓冲流

  • BufferedInputStream
  • BufferedOutputStream

用来包装字符的缓冲流

  • BufferedReader
  • BufferedWriter

因为缓冲流内部定义有缓冲区,所欲用缓冲流包装过的流一般比未包装过的流读写效率要高一些。
用法:

File() f1 = new File("这里写入需要读取的文件的绝对路径");
File() f2 = new File("这里写入需要写入的文件的绝对路径");
//根据源文件创建输入流
InputStream is = new FileInputStream(f1);
//根据目标文件创建输出流
OutputStream os = new FileOutputStream(f2);
//包装输入流
BufferedInputStream bis = BufferedInputStream(is);
//包装输出流
BufferedOutputStream bos = BufferedOutputStream(os);
//字符的也一样

之前的学习日志啥时候想起来想写了啥时候再写

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值