IO流
定义:一连串流动的数据,以先入先出的方式流动
作用:传输数据,读写文件,上传文件,下载文件
分类:
1.按流向分(程序为中心):
输入流:InputStream(所有输入流的基类,是抽象类)
输出流:OutputStream(所有输出流的基类,是抽象类)
FileOutputStream 文件字节输出流
2.按操作数据单元分:
字节流:万能流可以传输任意类型的数据
FileInputStream 文件字节输入流,从系统文件中读入数据到程序
字符流:传输纯文本数据
输入流: Reader FileReader
输出流: Writer FileWriter
3.按功能分:
节点流:传输数据,从数据流到目的地
功能流:提高节点流的功能,增强性能
ObjectInputStream 对象|反序列化输入流
ObjectOutputStream 对象|序列化字节输出流
注意:java中字符串中表示路径可以使用\或者/,使用\会识别成为转义字符
序列化:把对象数据转为可存储或者可传输的过程,成为序列化
1.不是所有的类型都能够序列化 要实现Serializable接口
2.先序列化后反序列化
3.读写的内容顺序保持一致
4.不是所有的属性都需要序列化 transient,属性值为默认值
5.静态的内容不会被序列化
6.如果父类实现序列化接口,子类的内容也可以序列化,子类实现序列化接口,子类只能序列化子类的内容,父类的内容无法序列化
例题:拷贝文件
package com.shsxt.file; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Demo8 { public static void main(String[] args) { InputStream a=null; OutputStream b=null; try { //获取一个文件字节输入流,文件位置通过参数指定"路径" a=new FileInputStream("D:/a.txt"); //获取一个文件字节输出流,文件位置通过参数指定"路径" b=new FileOutputStream("D:/c.txt"); byte[] p=new byte[1024]; //读入到数组中数个数 int lem=-1; while(-1!=(lem=(a.read(p)))){ //写入 b.write(p); //刷出 b.flush(); } } catch (FileNotFoundException e) {//捕抓异常 // TODO Auto-generated catch block e.printStackTrace();//输出异常 } catch (IOException e) {//捕抓异常 // TODO Auto-generated catch block e.printStackTrace(); }finally { try { //关闭文件 b.close(); a.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
序列化
package com.shsxt.file; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Demo6 { public static void main(String[] args) throws Exception{ write("D://作业//a.txt"); read("D://作业//a.txt"); } //目的文件路径 //序列化输出流 public static void write(String name) throws FileNotFoundException, IOException{ ObjectOutputStream a=new ObjectOutputStream(new FileOutputStream(name)); A p=new A("hsq",1); a.writeObject(p); //刷出数据 a.flush(); //关闭 a.close(); } //反序列化输入流 public static void read(String name) throws Exception{ ObjectInputStream b=new ObjectInputStream(new FileInputStream(name)); b.readObject(); b.close(); } } class A implements Serializable{ public String name; public int age; public A(){} public A(String name,int age){ this.name=name; this.age=age; } }