IO
Io流的概述
- 什么是io流?
- 存储和读取数据的解决方案。i:input 输入,o:output输出。
- io流的作用?
- 用来读写数据(本地文件,网络数据)
- io流按照流向可以分为哪两种?
- 输入流,内存 <—— 文件,这个过程称为读取。
- 输出流,内存 ——> 文件,这个过程称为写入。
- io流按照文件的操作类型可分为哪两种?
- 字节流,可操作视频,音频,文本等所有文件。
- 字符流,只能操作纯文本文件。
- 纯文本文件是指能用记事本打开并且内容能读懂的文件,如.txt .md.xml.lrc等
io流的体系
字节输出流
基本用法
-
创建字节输出流对象
-
代码格式:
-
new FileOutputStream(String s);
- 创建对象的形参可以是字符串来表示的文件路径,也可以是File对象表示的文件路径
- 如果路径当中文件不存在则会新建一个文件,前提是要保证父级路径正确
- 如果路径当中的文件存在,则会清空文件
-
-
写入数据
-
new FileOutputStream(String s).write(int i);
-
write当中表示数据的形参是整形的,但写出文件的内容是该整形数据所对应Ascii表的字符。
-
写出数据的三种方式
void write(int b) //一次写入一个数据 void write(byte[] b) //一次写入一个byte数组的数据 void write(byte[] b,int off,int len)//一次写入byte数组的部分数据,off表示起始位置的索引,len表示要输入数据的长度
-
-
释放资源
-
new FileOutputStream(String s).close()
-
如果不释放资源,则该文件将一直被占用,其他进程无法对其进行操作。
-
换行和续写
- 换行要用到转义字符:\r\n
- 在需要换行的操作之前先写出装有 \r\n 的 bety[]
- 续写(文件存在时创建字节输出流不会清空文件)
new FileOutputStream(写出文件的路径,是否开启续写)
- 在创建字节输出流对象时有两种构造函数的情况,一种时只有一个形参,一种是含有两个形参
- 该文件是否开启续写,由创建对象时第二个形参决定
- 参数为true,开启续写。
- 参数为false,关闭续写。
字节输入流
基本用法
-
创建字节输入流对象
-
new FileInputStream("要读取数据文件的路径")
-
如果该文件不存在则会报错。
-
-
读入数据
-
new FileInputStream("要读取数据文件的路径").read()
-
执行一次read方法只会读取一个字节数据,返回的数据是读取的字节数据在ACSII表上对应的数据。
-
如果读取文件时没有读取到数据则会返回-1.
-
-
释放资源
循环读取
- 利用读不到数据会返回-1做循环条件,去重复执行read()方法
- 切记要利用第三方变量将判断条件中读取到的数据存起来,莫要在方法体中再次读取。
文件拷贝
-
单字节拷贝
- 思想:边读边取。在进行循环读取的时候读入一个字节就写出一个字节。
- 缺点:因为是一个字节一个字节的读写所以效率特别慢。
-
多字节拷贝(重点)
-
思想:创建一个Byte数组,将读取的一个数组相同大小的数据去写出到另一个文件。
-
int read(byte[]) //java重写了这个方法,可以一次读入一个Byte数组等长的数据,读入的数据会被存放在数组当中,当然其返回值就不是读入的数据了,而是读入数据的长度。 byte[] bytes = new byte[8]; //创建的长度为8的数组 int len; //用来存储读取数据的长度 while ((len = fis.read(bytes)) != -1) { fos.write(bytes,0,len); //为防止最后一次读入的数据没把数组占满,我们采用读长的数据就写多长的数据 }
-
未更完。。。。。。。。。。。。。。。。