一、随机访问流
RandomAccessFile随机访问流的最大特点是:能读能写
RandomAccessFile rw = new RandomAccessFile(new File("a.txt"), "rw");
//rw模式:可读可写
rw.writeInt(100);
rw.writeDouble(3.14);
rw.writeBoolean(false);
rw.writeUTF("你好呀");
rw.close();
//怎么写的就怎么读,顺序不能乱
RandomAccessFile ra = new RandomAccessFile(new File("a.txt"), "rw");
int i = ra.readInt();
double v = ra.readDouble();
boolean b = ra.readBoolean();
String s = ra.readUTF();
System.out.println(i);
System.out.println(v);
System.out.println(b);
System.out.println(s);
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;
RandomAccessFile rw = new RandomAccessFile(new File("a.txt"), "rw");
rw.writeInt(100);
rw.writeDouble(3.14);
rw.writeBoolean(false);
rw.writeUTF("你好呀");
rw.close();
RandomAccessFile ra = new RandomAccessFile(new File("a.txt"), "rw");
//获取指针文件的位置
long filePointer = ra.getFilePointer();
System.out.println(filePointer);//0
int i = ra.readInt();
filePointer = ra.getFilePointer();
System.out.println(filePointer);//4
double v = ra.readDouble();
filePointer = ra.getFilePointer();
System.out.println(filePointer);//12
boolean b = ra.readBoolean();
filePointer = ra.getFilePointer();
System.out.println(filePointer);//13
String s = ra.readUTF();
filePointer = ra.getFilePointer();
System.out.println(filePointer);//24
//设置指针的位置
ra.seek(13);
String s1 = ra.readUTF();
System.out.println(s1);
二、序列化流
ObjectOutputStream序列化:把对象保存在硬盘上
ObjectInputStream反序列化:把对象读取到内存中
//把一个对象,序列化到硬盘上,有个要求,要求该类实现一个Serializable接口,然后该类的对象,才能正常序列化
//再实现了Serializable接口之后,最好再写一个 public static final long serialVersionUID = 42L;
//transient 某个成员变量不想序列化可以使用transient来修饰一下
Student student = new Student("张三", 23);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.txt"));
out.writeObject(student);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("student.txt"));
Object obj = in.readObject();
Student stu=(Student) obj;
System.out.println(stu.getName());
System.out.println(stu.getAge());
- 存储多个对象
//一个一个的存,一个一个的去取
Student student1 = new Student("张艺", 23);
Student student2 = new Student("姗姗", 20);
Student student3 = new Student("思思", 25);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Student.txt"));
out.writeObject(student1);
out.writeObject(student2);
out.writeObject(student3);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("Student.txt"));
Object obj = in.readObject();
Student stu=(Student) obj;
System.out.println(stu.getName()+"==="+stu.getAge());
obj = in.readObject();
stu=(Student) obj;
System.out.println(stu.getName()+"==="+stu.getAge());
obj = in.readObject();
stu=(Student) obj;
System.out.println(stu.getName()+"==="+stu.getAge());
//我们可以将对象放到集合中,让集合序列化到硬盘上,然后去读取某个数据
Student student1 = new Student("张艺", 23);
Student student2 = new Student("伞伞", 27);
Student student3 = new Student("思思", 30);
ArrayList<Student> list = new ArrayList<>();
list.add(student1);
list.add(student2);
list.add(student3);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Student.txt"));
out.writeObject(list);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("Student.txt"));
Object obj = in.readObject();
ArrayList<Student> students=(ArrayList<Student>) obj;
Student student = students.get(1);
System.out.println(student.getName()+"==="+student.getAge());
三、properties属性集合
经常用它来读取配置文件,属于双列集合
Properties properties = new Properties();//它规定了键值是String类型
properties.put("aaa","bbb");
Object aaa = properties.get("aaa");
System.out.println(aaa);
//用它特有的方法,来存储键值
Properties properties = new Properties();
properties.setProperty("凡凡","呵呵");
String value = properties.getProperty("凡凡");
System.out.println(value);
//参数2:默认值,如果键没有找到对应的值,则返回默认值
String property = properties.getProperty("啦啦", "嘟嘟");
System.out.println(property);
- 从配置文件中读取配置文件的属性
public static void main(String[] args) throws IOException {
// LinkedHashMap<String, String> map = new LinkedHashMap<>();
// BufferedReader reader = new BufferedReader(new FileReader("User.properties"));
// String line = reader.readLine();
// String[] split = line.split("=");
// map.put(split[0],split[1]);
//
// String line1 = reader.readLine();
// String[] split1 = line1.split("=");
// map.put(split1[0],split[1]);
// System.out.println(map);
Properties properties = new Properties();
//读取配置文件
//要求配置文件键值用等号=连接
properties.load(new FileReader("User.properties"));
System.out.println(properties);
- 将配置文件中的属性添加到配置文件中
Properties properties = new Properties();
properties.setProperty("username","王五");
properties.setProperty("password","123456");
//把配置文件中的属性,保存到配置文件中
properties.store(new FileWriter("haha.properties"),null);
//参数2表示使用默认的注释,也可以自己定义注释内容