IO流:流是一组有顺序的 有起点和终点的字节集合,对数据传输的总称或抽象,数据在两设备的传输,流的本质是数据传输,根据传输特性将流抽象为各种类;
I:input 输入;
O:output 输出;
节点流:直接操作数据源;
处理流:对其他流进行处理;
四大抽象类:
InputStream:
OutputStream:
Reader:
Write:
文件流
FileInputStream:打开文件 读取文件中的数据,
读取文件 先找到他
绝对位置 以系统根目录为准
相对位置./ 表示当前目录
../表示上级目录
../../表示上上级目录
字节输入流:按照字节的方式进行数据读取
创建字节输入流
传入文件路径 用于打开该文件获取数据
绝对路径
FileInputStream fis=new FileInputStream("D:\\a.txt");
在eclipse中 ./定位当前项目,并不是当前文件
相对路径
read方法重载 可以传递一个数组 一次读取会把该数组读满 然后一次性返回
返回int类型 为读取当前的个数 如果达到文件末尾 返回-1
数组就相当于一个缓冲区 效率有所提升
//available:可读取的字节数
System.out.println(fis.available());
//数组容量并不是越大效率越高 容量和数据大小刚好一致的时候效率最高
byte[]bytes=new byte[fis.available()];
int temp=0;
while((temp=fis.read(bytes))!=-1){
//把字节数组 转换为字符串 可能出现数据重复问题
//System.out.println(new String(bytes));
//因为read返回的是当前次读取的元素个数 所以我们可以指定读多少 转换多少
//数组 起始位置(包含),个数
System.out.println(new String(bytes,0,temp));
把字节数组 转换为字符串 可能出现数据重复问题
System.out.println(new String(bytes));
因为read返回的是当前次读取的元素个数 所以我们可以指定读多少 转换多少
数组 起始位置(包含),个数
FileReader : 一次读取一个字符,也就是两个字节,主要用于读取纯文本文件,解决乱码问题
read() : 一次读取一个字符,返回对应的ASCII码,达到文件末尾返回-1
read(char[]) : 一次读取一个字符数组,提高读取效率,返回本地读取的字符个数,到达文件末尾返回-1
FileOutputStream 字节输出流
用于把数据写出到指定文件中
如果指定文件不存在 会自动创建该文件 但是不会创建目录(不会创建文件夹)
try(FileOutputStream fos=new FileOutputStream("D:/a.txt")){
//写出对应ASCII码
fos.write(97);
byte[]bytes={97,98,99};
//写出数组
fos.write(bytes);
//不能直接写出字符串
String str="你好吗";
//getBytes:把该字符串转换为字节数组
fos.write(str.getBytes());
//刷新缓存,强制持久化
fos.flush();
//覆盖写入 当创建该文件的输出流对象的时候 就会把文件内部全部内容清除
//FileOutputStream fos1=new FileOutputStream(D:/a.txt");
//创建对象时 传入第二参数true 说明是追加写入 则不会清空该文件
FileOutputStream fos1=new FileOutputStream("D:/a.txt",true);
fos1.write(98);
创建字符输入流
FileReader fr=new FileReader("./src/day_01/Test_01.java");
创建字符输入缓冲流对象
BufferedReader br=new BufferedReader(fr);
br.readLine():读取一行数据 返回读取到这一行数据的内容 为String 到达文件末尾返回null;
String temp=null;
while((temp=br.readLine())!=null){
System.out.println(temp);
//创建字符输出流 FileWriter fw=new FileWriter("D:/a.txt"); //创建字符输出缓冲流 BufferedWriter bw=new BufferedWriter(fw); //写出 bw.write("你好吗"); //换行 bw.newLine(); bw.write("你管得着吗"); //刷缓存 bw.flush();
数据流 是为了不同平台之间数据读取的统一性 Linux windows 等操作系统对数据进行存储的时候 方式是不同的
为了解决之间的差异性 java提供了两个轻量级的方法 只要每个平台有java环境 就能保证数据的一致性
比如 在进行网络协议传输的时候 是非常适用的