通过输入流输出流,反射对log4j对象获取

这篇博客介绍了如何通过Java的输入流和输出流操作Properties文件,结合反射技术来创建和配置log4j对象。首先,创建了一个Girl类实现Serializable接口。然后,演示了从Properties文件读取数据,生成默认的log4j配置,并获取特定key的value值。接着,展示了如何获取所有属性并用逗号分隔显示。最后,讲解了如何将数据写回Properties文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建女孩类
public class Girl implements Serializable {

//transient修饰的属性不能被序列化
private transient String name;
private String gender;
private int age;

public Girl() {
}

public Girl(String name, String gender, int age) {
    this.name = name;
    this.gender = gender;
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getGender() {
    return gender;
}

public void setGender(String gender) {
    this.gender = gender;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

@Override
public String toString() {
    return "Girl{" +
            "name='" + name + '\'' +
            ", gender='" + gender + '\'' +
            ", age=" + age +
            '}';
}

}
从Properties文件中读数据

  @Test
void test1() throws IOException {
    // Properties类:对 Properties文件操作的类
    Properties properties = new Properties();
    //加载文件//路径
    FileReader fileReader = new           FileReader("src/main/resources/a.properties");
    properties.load(fileReader);
    //获取数据
    String name = properties.getProperty("a.name");
    System.out.println("name=" + name);
    //获取数据,如果key不存在,返回默认值
    System.out.println(properties.getProperty("height", "180"));

    System.out.println(properties.propertyNames());
    //获取所有的key
    System.out.println(properties.stringPropertyNames());
    //遍历properties文件的内容
    for (String Key : properties.stringPropertyNames()) {
        String value = properties.getProperty(Key);
        System.out.printf("%s=%s\n", Key, value);
    }
}

通过Properties生成对象,默认log4j 通过配置文件产生对象

@Test
void test2() throws IOException {
    // Properties类:对 Properties文件操作的类
    final Properties properties = new Properties();
    //加载文件//路径
    FileReader fileReader = new FileReader("src/main/resources/log4j.properties");
    properties.load(fileReader);

获取指定key的value值

      String zoo = properties.getProperty("zoo");
    System.out.println(zoo);

获取所有动物的名,用逗号隔开

    String[] strings = zoo.split(",");
    System.out.println(Arrays.toString(strings));
    Stream.of(strings).skip(1).forEach(x -> {
        String classname = properties.getProperty(x + ".class");
        try {
            Class<?> aClass = Class.forName(classname);
            Constructor<?> constructor = aClass.getConstructor();
            Object o = constructor.newInstance();
            String nickname = properties.getProperty(x + ".nickname");
            //
            Method nicknameMethod = aClass.getMethod("setNickname", String.class);
            nicknameMethod.invoke(o, nickname);

            int weight = Integer.parseInt(properties.getProperty(x + ".weight"));
            Method weightMethod = aClass.getMethod("setWeight", int.class);
            weightMethod.invoke(o, weight);
            System.out.println(o);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();

        }
    });
    
}

//

向Properties文件中写数据

@Test
void test3() throws IOException {
    Properties properties = new Properties();
    properties.setProperty("a", "456");
    properties.setProperty("b", "56");

    FileWriter fileWriter = new FileWriter("src/main/resources/b.properties", true);//在后面添加,不是覆盖
    properties.store(fileWriter, "第一次提交:");
}

@Test
void test4() throws IOException {
    //创建一个Girl对象,并把对象存入文件666
    Girl girl = new Girl("李若彤", "女", 19);

    ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("src/main/resources/666"));
    objectOutputStream.writeObject(girl);
}

@Test
void Test5() throws IOException, ClassNotFoundException {
    FileInputStream fileInputStream = new FileInputStream("src/main/resources/666");
    ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
    Object o = objectInputStream.readObject();
    if (o instanceof Girl) {
        Girl girl = (Girl) o;
        System.out.println(girl);
    }

}
需求说明 (1)使用UserDaoImp1类的方法查找用户,并用User类的getUserInfo()方法输出用户信息 (2)使用一个不存在的用户名查找用户,使用try-catch对抛出的异常进行处理 实现思路及关键代码 (1)在测试类中调用UserDaoImp类的addUser(User user)方法,添加用户,然后用findUser(String uName)方法查找并输出用户信息 (2)在测试类中调用UserDaoImp1类的findUser(String uName)方法,使用不存在的用户名查找用户,并试图输出用户信息 (3)对抛出的异常使用try-catch进行异常处理。 实践二:使用try-catch-finally进行异常处理 需求说明 (1)对实践1的异常使用try-catch-finally进行异常处理 (2)在finally块输出是否抛出了异常 实现思路及关键代码 (1)在任务一中的代码上增加finally块 (2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践三:使用throw和throws 需求说明 修改UserDaoImpl类的updateUser(User user)方法,要求如果用户id被修改,则: (1)不执行更新 (2)抛出一个Exception异常 (3)异常消息是“用户id不能修改” 实现思路及关键代码 (1)修改UserDao类的updateUser(User user)方法,声明抛出异常 (2)修改UserDaoImpl类的updateUser(User user)方法,加入判断语句,并抛出异常 (3)在测试类中调用,并进行异常处理 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值