什么是流?
流:Stream,指数据源或数据目标的抽象形式,例如:字节从输入(input)流向输出(output),在Java中,使用Java.io包中的Stream类进行标准输入输出流。
创建文件
File file = new File("E:"+File.Separater+"oop"+File.Separater+"myFile.txt");
//创建file
file.mkdirs();
//File类的构造方法
public File(String pathname)
public File(String parent,String child)
public File(File parent,String child)
//高级获取功能
public String[] list()
public File[] listFiles()
IO基本流
字节流可以读取文件和绝对路径:FileInputStream(File file) 和FileInputStream(String name)
合并流
SequenceInputStream(InputStream s1,InputStream s2)
序列化与非序列化
首先介绍概念:
- 序列化:对象转字节(字节好持久化)
- 非序列化:字节转对象
在Java中实现了serializable接口后,JVM能够在底层实现序列化和反序列化,serializable的序列化有以下几个规定:
- 只有对象的非静态数据可以序列化
- 具有transient属性的数据不能序列化
•
java.io.ObjectInputStream
•
public
ObjectInputStream
(
InputStream
in)
•
public Object
readObject
() throws
IOException
•
java.io.ObjectOutputStream
•
public
ObjectOutputStream
(
OutputStream
out)
•
public void
writeObject
(Object o) throws
IOException
public static void main(String[] args) throws IOException, ClassNotFoundException{
Student stu=new Student(981036,"Liu Ming",18, "CSD");
FileOutputStream fo=new FileOutputStream("data.ser");
ObjectOutputStream so=new ObjectOutputStream(fo);
try{ stu.writeObject(so);
so.close();
}catch(IOException e ){ System.out.println(e);
}
FileInputStream fi=new FileInputStream("data.ser");
ObjectInputStream si=new ObjectInputStream(fi);
try{ stu=(Student)stu.readObject(si);
System.out.println(stu);
si.close();
}catch(IOException e ){ System.out.println(e);
}
}
在序列与反序列之间还存在一个serialVersionUID的问题
要解决这个问题也就需要在序列与反序列之前指定serialVersionUID,这样就能够避免报错的出现,解决方案为在类开始时添加一句
private static final long serialVersionUID = 1L;