1.先用输出流将配置文件写入文件中
2.用输入流读取配置文件的信息,在控制台打印其中的内容
3.用反射通过配置文件的内容创建对象,并给对象的属性赋值(对象的属性的数据类型只有字符串和整数类型)
自定义类的简单代码:
public class Studen { //三个属性 private String name; private String gender; private Integer age; @Override public String toString() {//重写tostring方法为了方便打印学生对象的属性值 return "Studen{" + "name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + '}'; } }
测试类代码:
import org.junit.Test; import java.io.*; import java.lang.reflect.Field; import java.util.Properties; import java.util.Set; public class Test01 { @Test public void test01(){ //写配置文件 Properties pro = new Properties(); pro.setProperty("name", "黎明"); pro.setProperty("gender", "男"); pro.setProperty("age", "55"); pro.setProperty("class", "cn.itcast.demo01.Studen"); //创建输出流 try (OutputStream out = new FileOutputStream("D:\\develop\\code\\0408\\srcstudent.properties")) { //将配置文件放到该模块的src文件下,不然后面读取的时候会引发文件找不到异常 pro.store(out,"stuMessage"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Test public void test02() throws IOException { //读取配置文件 Properties pro = new Properties(); //创建输入流(通过类加载器获取输入流) InputStream in = Test01.class.getClassLoader().getResourceAsStream("student.properties"); //InputStream in = new FileInputStream("student.properties"); pro.load(in); in.close(); System.out.println(pro); } @Test public void test03(){ //根据配置文件信息创建对象,并给对象赋值 //定义集合保存读取的数据 Properties pro = new Properties(); //通过类加载器获取配置文件的输入流 InputStream in = Test01.class.getClassLoader().getResourceAsStream("student.properties"); try { pro.load(in);//读取配置文件数据 } catch (IOException e) { e.printStackTrace(); } //获取类的全限定名 String className = pro.getProperty("class"); try { //根据全限定名创建class对象 Class clazz = Class.forName(className);//创建class对象 //根据class对象创建学生对象 Studen stu = (Studen)clazz.newInstance(); //获取配置文件的所有键的集合 //排除class并在剩下的键中找到键相对应的字段的类型,如果类型是字符串就直接赋值,否则就将该键对应的值解析成整数类型并给对象赋值 Set<String> keys = pro.stringPropertyNames(); for (String key : keys) { if (!key.equals("class")) { Field filed = clazz.getDeclaredField(key);//获取字段(属性) filed.setAccessible(true);//设置字段为可使用的 Class type = filed.getType();//获取字段的类型 if (type.equals(String.class)) {//如果字段类型为字符串类型 filed.set(stu,pro.getProperty(key));//给字段赋值 }else {//字段类型不是字符串 filed.set(stu,Integer.parseInt(pro.getProperty(key))); //将字段值解析成整数类型,然后再给属性赋值 } } } System.out.println(stu);//打印学生对象信息 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } }