输入输出流(IO)
文件(File)
java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录。
File类只用于表示文件(目录)的信息(名称、大小等),并且能对文件的内容进行访问。
getCanonicalPath()---获取当前路径
delete()删除路径名表示的文件或目录
exists()测试路径名表示的文件或目录是否存在
listFiles()返回一个抽象路径名数组,这些路径名表示此路径名表示的目录中的文件
mkdir()新建一个目录
createNewFile()新建一个文件

创件一个新的文件
File d=new File(f,"demo");
if(!d.exists()){
d.mkdir();
}

创件新的文件对象
File text=new File(d,"text");
if(!text.exists()){
text.createNewFile();
}

Java中的IO流是实现输入/输出的基础。
IO流按方向分为输入流和输出流
IO流按读取大小分为字节流和字符流
IO流按功能分为节点流和处理流(包装流)

字节流:(InputStream OutputStream)
所有面向字节的流类都继承于InputStream类(读取\输入流)或OutputStream类(写出\ 输出流),这两个类是抽象类,我们可以利用它的子类来完成不同的功能。

文件输入流 FileInputStream 继承了InputStream,FileInputStream 具体实现了在文件上读取数据。
文件输出流 FileOutputStream继承了OutputStream,FileOutputStream 具体实现了在文件上写入数据。

字符流:
字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层仍然是基本的字节流
字符流的基本实现
InputStreamReader 完成 byte 流解析为 char 流, 按照编码解析
OutputStreamWriter 提供 char 流到 byte 流, 按照编码处理

主要使用它们两个FileReader FileWriter
Reader类中两个常用类:
FileReader:以字符流的形式读取文件,与FileInputStream用法基本一致。
BufferedReader:将流读入缓冲区,然后从缓冲区读取,并且提供了readLine()方法,可以从文本文件中整行的读取数据。

Writer类中两个常用类:
FileWriter:以字符流的形式写入文件,与FileOutputStream用法基本一致。
BufferedWriter:将缓冲区输出到流。


字符流和字节流的区别:
InputStream和OutputStream主要用来处理可以被直接读作bytes的数字。
Reader和Writer用来处理文本。


对象序列化(必须实现Serializable(序列化)接口)
对象序列化就是为了保存在内存中各个对象的状态

对象序列化,就是将 Object 转换为 byte 序列,反之叫对象的反序列化。
序列化流(ObjectOutputStream), 是过滤流
ObjectOutputStream writeObject(Object) 序列化对象
ObjectInputStream readObject() 对象的反序列化
Users u=new Users();
u.setUserId(1);
u.setUserName("zhangsan");
u.setUserPwd("admin");
File file=new File("c://wode.txt");
FileOutputStream fo=new FileOutputStream(file);
ObjectOutputStream ops=new ObjectOutputStream(fo);
ops.writeObject(u);


读取:
File file=new File("c://wode.txt");
FileInputStream fis=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(fis);
Users u=(Users) ois.readObject();
System.out.println(u.getUserId()+" "+u.getUserName());