大家好,今天给大家带来IO流第二段~
3.FileInputStream
读的改进:一个一个读太浪费时间和资源,交互太频繁,所以:
int read(byte【】 b)
一次最多读取b.length个字节
减少硬盘和内存的交互,提高程序的执行效率
往byte【】 数组中读
4.文件的地址可以写绝对路径和相对路径
相对路径一定是从当前位置作为起点开始找
IDEA默认的当前路径是:工程Project的根就是IDEA默认的当前路径 :C:\Users\许原风\IdeaProjects\test01当前的自定义的文件的第一个下面
5.s.read()读取下一个数值
s.read(arr)读取到的字节数量(需要有byte数组)
6.int avai()返回流当中剩余的没有读到的字节数量
long skip(long n)跳过几个字节不读
7.byte[] arr=new byte[s.available()];这种方式不适合太大的文件,因为byte【】数组不能太大
9.15
FileInputStream(把文件中的内容也就是硬盘中的内容读出来,读到内存中)
1.FileOutputStream(就是在代码中写个东西然后把它写入一个文件中,就是从内存写入文件中!)文件字节输出流,负责写,从内存到硬盘
2.s=new FileOutputStream("text001/Collection Map/src/test");//(里面的文件不存在的时候会自动新建)这种方法会把文件原来的内容清空,谨慎使用
s=new FileOutputStream("text001/Collection Map/src/test.txt",true);//追加不会清空,会在原文件内容后面写入
一定要写s.flush()
3.文件复制
使用FileInputStream+FileOutputStream完成文件的的拷贝
拷贝的过程应该是一边读,一边写。
使用以上的字节流拷贝文件的时候,文件类型随意,万能的,什么样的文件都可拷贝
举例:将D盘文件拷贝到C盘:先从D盘读入到内存中,再从内存写入到C盘
4.FileReader:
文件字符输入流,只能读取普通文本
读取文本内容时,比较方便快捷
5.字符流:char数组 字节流:byte数组
6.FileWriter:
文件字符输出流,写
只能输出普通文本(FileWriter中s.write()几面可以是字符串,换行符等)
7.输出流若没有文件都会自动新建你只需传个名字
8.BufferedReader:
带有缓冲区的字符输入流。
使用这个流的时候不需要自定义char数组和byte数组,自带缓冲
FileReader reader=new FileReader("src/io/Copy01.java");//fileReader是Reader的子类,BufferedReader需要传一个reader
//当一个流的构造方法中需要另一个流的时候,这个被传进来的流叫做节点流(当前:FileReader)
//外部负责包装的这个流,叫做包装流,或者处理流(当前:BufferedReader)
BufferedReader bf=new BufferedReader(reader);
关闭流,对于包装流来说,只要关闭最外层流就行,里面的节点流会自动关闭,(可以看源码)
9.//字节流
/* FileInputStream fi = new FileInputStream("src/io/Copy01.java");
//通过转换流转换
InputStreamReader in=new InputStreamReader(fi);
//这个构造方法只能传一个字符流,不能传字节流
BufferedReader bf=new BufferedReader(in);*/
//合并:
BufferedReader bf=new BufferedReader(new InputStreamReader(new FileInputStream("src/io/Copy01.java")));
10.BufferedWriter:带有缓冲的字符输出流