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文件结构简单,不能存放复杂结构的数据,但是对于简单的配置场景还是很好用的。