Properties
Properties属于集合 ,它有个其他集合不具备的特殊能力,能够直接操作文件。
它操作的文件被称为"属性文件"或者Properties文件。这种文件的格式非常简单易用,所以它也是常用的配置文件之一。
属性文件的特殊格式是:
用 key=value 对 的方式来构建文本;
Properties对象可以直接从这种文件当中读取数据,同样用键值对的方式进行存放;
也能把存放到Properties数据
键key不能重复
值value可以重复 通过键 可以查找出值;
public class TestProps {
public static void propsMethodShow() {
Properties props = new Properties();//产生一个没有装东西的Properties容器
//放入数据 --- 键与值必须成对放入,都是String
// --- 必须保证键不能重复
props.setProperty("J001","江小白1");
props.setProperty("J002","江小白2");
/*修改数据 --- 仍然调用setPropetiy方法,第一个参数是存在的键,
那么就会修改这个键对应的值为第二个参数。*/
props.setProperty("J002","江小白02");
//删除数据 --- 1、只需要传入键,如果这个键存在,那么就删除掉这对键值对
// 2、remove方法接收的参数不是String,而是Object
// 这是一个Properties从集合框架当中继承而来的行为。
props.remove("J002");
//获取数据 --- 根据键获取值,如果键不存在不会报异常,而是返回null
String value = props.getProperty("J001");
System.out.println(value);
}
/*
文件路径有两种表示形式:
1、相对路径;--- 相对路径的是相对于我们的工程目录
file/student.data
2、绝对路径; --- D:/文件夹/子文件夹/文件名
*/
public static void readFile(){
Properties props = new Properties();
try {
props.load(new FileInputStream("file/student.properties"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(props.size());
System.out.println(new String(props.getProperty("J192002").getBytes(StandardCharsets.ISO_8859_1)));
}
public static void writeFile(){
Properties props = new Properties();
props.setProperty("1314","hello");
props.setProperty("1315","world");
try {
/*
1、把文件操作类换成FileOutputStream;
2、如果文件不存在,不会报错,而是会产生新文件;
3、comments参数代表的是你可以写入到properties文件中的注释,可不写;
4、用store方法存进去
*/
props.store(new FileOutputStream("file/stu.data"),"");
} catch (IOException e) {
e.printStackTrace();
}
}
}
练习:
输入学生学号,获取学生对象
public static void practise(){
Properties stuProps = new Properties();
try {
stuProps.load(new FileInputStream("file/student.properties"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("请输入学生学号:");
String input = new Scanner(System.in).next();
String stuValue = stuProps.getProperty(input);
if(stuValue != null){
String[] stuValues = stuValue.split("[-]");
Student stu = new Student(stuValues[1],Integer.parseInt(stuValues[2]),stuValues[0]);
System.out.println(stu);
}else{
System.out.println("该学号学生不存在。");
}
}
大多数情况,不会直接用这个类的对象来充当容器存放数据,而是专门用它来操作properties文件。properties文件结构简单,不能存放复杂结构的数据,但是对于简单的配置场景还是很好用的。