IO流
什么是iO?
IO是对内存的读和写
输入和输出都是相对内存为参照
1 以流的方向分类
往内存中去,叫做输入,或者叫读
从内存中出来,叫做输出,或者叫写
2 读取数据方式不同
字节流
读取1个byte 等同于8个二进制位 可读取任何类型,音乐,图片
字符流
读取纯文本文件
四大顶流都是直接继承Object
InputStream(字节流)
Outputstream(字节流)
Reader(字符流)
writer(字符流)
养成好习惯,流用完一定要关闭,不然会耗费很多资源
close()和flush()
close()方法四大顶流都有
所有的输出流都是可刷新的,有flush()方法,将未输出的数据强行输出完
文件专属
FileInputStream(字节流)
●int read( ) 一次读取一个字节,内存和硬盘交互频繁
返回字节值
●int read( byte[] b)一次读取b.length个字节,提高执行效率
返回字节数量
byte []bytes = new byte[4];
int len =0;
while ((len=fis.read(bytes))!=-1){ System.out.print(new String(bytes,0,len));
}//一次读取byte数组长度个值
FileOutputstream(字节流)
int res =0;
byte []bytes =new byte[3];
while ((res=fis.read(bytes))!=-1){ fos.write(bytes,0, res);}
//一次写出byte数组个值
文件复制
拷贝的时候文件类型不限,都能拷贝
fis = new FileInputStream("src/com/IO/myfile");
fos = new FileOutputStream("src/com/IO/myfile_out");
int res =0;
byte []bytes =new byte[3];
while ((res=fis.read(bytes))!=-1){ fos.write(bytes,0, res);}
FileReader(字符流)
●擅长读取普通文本文件
fr = new FileReader("src/com/IO/myfile");
char []chars = new char[1024];
int res = 0;
while ((res=fr.read(chars))!=-1){ System.out.println(new String(chars,0,res));}
Filewriter(字符流)
●擅长输出普通文本文档
注意:不追加append为true,会清空文件内容再写入
fw = new FileWriter("src/com/IO/myfile",true);
//在源文件内容后继续输出
char []chars {'我','是','中','国','人'};
fw.write(chars);
转换流(字节–>字符)
io.InputStreamReader
当需要传入reader类型,但实际有Inputstream可通过转换流转换
BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream("src/com/IO/myfile")));
io.OutputStreamWriter
当需要传入Writer类型,但实际有Outputstream可通过转换流转换
BufferedWriter bw = new BufferedWriter(new InputStreamWriter(new FileOutputStream("src/com/IO/myfile")));
缓冲流专属
io.BuffereReader
不需要自己定义byte/char数组
new需要传入reader,但reader为抽象类,可传入子类FileReader
●readLine( ) 方法
读取一行数据,不读取换行符
FileReader read =newFileReader("src/com/IO/myfile");
//节点流
BufferedReader bf = new BufferedReader(read);//包装流
String line = null;
while ((line = bf.readLine())!=null){ System.out.println(line); }
io.BuffereWriter
同上
io.BuffereInputStream
同上
io.BuffereOutputStream
同上
数据流专属
io.DataInputStream
了解
io.DataOutputStream
了解
标准输出流
io.PrintWriter
io.PrintStream
对象专属流
io.ObjectInputStream
将指定文件所存的类的实例化对象信息读入内存
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students"));
Object obj = ois.readObject(); System.out.println(obj);
ois.close();
io.ObjectOutputStream
当我们需要实现信息的持久化保存,可将一个类的实例化对象信息写出指定文件中
注意:自定义的类序列需要此类实现Serializable接口,此接口只是标识,不包含任何方法
当系列化后每个类都会生成唯一的编号serialVersionUID
Student student1 = new Student("zs", 18);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("students")); out.writeObject(student1);
out.flush();
out.close();
}}class Student implements Serializable