IDEA中读取properties文件时的问题

文章讲述了在IDEA中读取properties配置文件时,路径问题对程序运行的影响。在main方法中,文件路径相对于Project,而在单元测试中则是相对于Module的src目录。使用类加载器(ClassLoader)读取文件时,默认路径为当前Module的src目录。通过调整文件位置和使用类加载器,可以成功读取并执行配置文件内容。
摘要由CSDN通过智能技术生成

IDEA中读取 properties 文件

  • public class ReflectTest02 {
        public static void main(String[] args) throws  Exception{
            //通过IO流读取classinfo.propesties文件
            FileReader reader = new FileReader("properties.properties");
            //创建属性类对象Map
            Properties pro  = new Properties();
            //加载
            pro.load(reader);
            reader.close();
            //通过key获取value
            String  calssName = pro.getProperty("className");
            System.out.println(calssName);
        }
    }
    
    • 以上代码是要在 main 方法中读取配置文件
  • 请添加图片描述

    • 此时 properties.properties 文件在 module 中
  • 请添加图片描述

    • 这时会报 文件找不到的异常
  • IDEA中

    • IDEA中如果使⽤ Junit 中的单元测试⽅法测试,相对路径即为当前 Module 下
    • IDEA中如果使⽤ main() ⽅法测试,相对路径即为当前的 Project 下,不是 Project 的 src 下
  • 请添加图片描述

    • 将 properties.properties 移动到 Project 下
  • 请添加图片描述

    • 成功运行,没有出错
  • 需要注意的是:

    • 如果我们使用类加载器(ClassLoader)获取流读取文件的默认路径是当前 Module 的 src 目录下

    • public class ReflectFrame {
          public static void main(String[] args) {
              try {
                  Properties pro = new Properties();//构建Properties 文件类对象pro
      
                  Class clazz = ReflectFrame.class;//获取框架类的对象clazz
                  //返回类加载器
                  ClassLoader classLoader = clazz.getClassLoader();
                  //classLoader 将ReflectFrame对应的字节码文件加载到内存中
                  InputStream is = classLoader.getResourceAsStream("properties.properties");//字节输入流
                  pro.load(is);//加载当前这个配置文件
      
                  String className = pro.getProperty("className");//获取全类名
                  String methodName = pro.getProperty("methodName");//获取方法的名字
      
                  Class cls1 = Class.forName(className);//获取Class对象
                  Object obj = cls1.newInstance();//创建对象 ReflectDemo.Person
                  //invoke()执行 执行哪一个方法 获取方法  根据得到的方法名称
                  Method method = cls1.getMethod(methodName);
                  method.invoke(obj);//执行方法
              } catch (Exception e) {
                  throw new RuntimeException(e);
              }
          }
      }
      
      • 利用类加载器获取流读取配置文件
    • 请添加图片描述

``

* 利用类加载器获取流读取配置文件
  • 结果正常输出,证明前面的结论是正确的!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值