Java 各个I/O流的使用步骤
1.FileInputStream,FileOutputStream
File file = new File(" 文件路径");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream("文件位置");
byte[] buffer = new byte[1024];
int len;
while((len = fis.read(buffer)) ! = -1){
fos.write(buffer,0,len);
}
fis.close();
fos.close();
产生异常try-catch处理,关闭操作放在finally中
2.FileReader,FileWriter与上基本一致,只需把byte[]数组改为char[];FileWriter如果文件不存在则创建文件,如果文件存在就完全覆盖文件,如果文件存在且想在文件末尾写入数据,则使用new FileWriter(file,true),默认第二个参数为false即完全覆盖
3.BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter
File file = new File(" 文件路径");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream("文件位置");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] buffer = new byte[1024];
int len;
while((len = bis.read(buffer)) ! = -1){
bos.write(buffer,0,len);
}
bis.close();
bos.close();
fis,fos会随着bis,bos的关闭而关闭
BufferedReader与BufferedWriter用法与上基本一致
4.InputStreamReader,OutputStreamWriter
InputStreamReader将输入的字节流转换为字符流输入,可读入到char[]中
OutputStreamWriter将字符流转换为字节流输出
5.RandomAccessFile
不区分输入输出,new RandomAccessFile(file,"r/rw/rwd/rws")来区分是只读还是可以写,有2个重要的方法,read(byte[] buffer) write(byte[] buffer,int offset,int length),seek(int pos)
writer如果文件已经存在,则在文件开头(索引从0开始)写入数据
6.ObjectInputStream(反序列化),ObjectOutputStream(序列化)
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("xxx.dat"));
oos.writeObject(Object obj);
oos.flush();
oos.close();
异常处理不再赘述
以上是序列化过程
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("xxxx"));
Object obj = ois.readObject();
ois.close();
以上是反序列化过程
注意:只有实现了Serializable接口的类才能被序列化(该类的父类也必须实现并且有serialVerison),且该类中一定要有一条语句 public/private static final long serialVersion = xxxxxxL,有此条语句后,如果序列化之后类发生了改变,在反序列时仍然能找到该类。同时,该类中的属性一定要是可序列化的(基本数据类型默认可序列化),属性不能被static或transient修饰,否则无法将该属性序列化,但不会报错。