Idea获取资源配置文件路径

Idea在类文件当前目录下生产.properties文件:

    右击类文件当前目录--rcnew-->Resource Bundle,即可生成.properties文件,该文件以Key:Value方式配置参数对。

   

    我们进行以下尝试:

/*获取配置文件路径*/
//通过getClass()方法+配置文件名方式获取 》》获取成功
System.out.println(this.getClass().getResource("config.properties").getPath()+'\n');
//通过getClass()方法+绝对路径方式获取  》》获取成功
System.out.println(this.getClass().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClass()方法+相对路径方式获取  》》获取失败,/config.properties表示在根目录下获取该文件
System.out.println(this.getClass().getResource("/config.properties").getPath()+'\n');

//通过getClassLoader()方法+配置文件名方式获取 》》获取失败,getClassLoader()方法是从根目录下获取
System.out.println(this.getClass().getClassLoader().getResource("config.properties").getPath()+'\n');
//通过getClassLoader()方法+绝对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
System.out.println(this.getClass().getClassLoader().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClassLoader()方法+相对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
System.out.println(this.getClass().getClassLoader().getResource("/config.properties").getPath()+'\n');

测试结果:

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

根据尝试结果来看,有以下结论:

1. 一般情况下选择getClass().getResource()方法,要比getClassLoader()方法好用。

2. getClass Loader()方法不支持‘/’方式获取文件。

3. getClass().getResource()方法支持文件名/绝对路径/相对路径方式获取文件,其中:

    1)文件名方式是从.class文件同目录下进行查询获取。

    2)绝对路径是从根目录按照绝对路径进行查询获取。

    3)相对路径方式是在根目录下进行查询获取,下文中另作一些配置后,也可以获取到该配置文件。

4. getClassLoader().getResource()方法支持文件名方式获取文件,不过是在根目录下进行查询获取,同样参见下文另作配置后,也可以获取到该文件。

 

下面我们尝试将Java_Study目录标记Resource,再次进行测试:

通过此图可以看到根目录为D:\Code\In_IDEA\IdeaProjects,src目录为Source标记目录,即源码目录,其作用时表明该目录及其子目录有编译所需要源码,在编译时,其作为编译的一部分进行编译。Tests标记指的时测试源码,作用主要时区分开开发和测试的源码,Resource标记指的是资源配置文件,在编译时将该目录下配置文件拷贝至根目录,即该目录可等同于根目录。

/*获取配置文件路径*/
//通过getClass()方法+配置文件名方式获取 》》获取成功
System.out.println(this.getClass().getResource("config.properties").getPath()+'\n');
//通过getClass()方法+绝对路径方式获取 》》获取成功
System.out.println(this.getClass().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClass()方法+相对路径方式获取  》》获取成功
System.out.println(this.getClass().getResource("/config.properties").getPath()+'\n');

//通过getClassLoader()方法+配置文件名方式获取 》》获取成功
System.out.println(this.getClass().getClassLoader().getResource("config.properties").getPath()+'\n');
//通过getClassLoader()方法+绝对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
//System.out.println(this.getClass().getClassLoader().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClassLoader()方法+相对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
//System.out.println(this.getClass().getClassLoader().getResource("/config.properties").getPath()+'\n');

测试结果:

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/config.properties

可以看到,将Java_Study目录标记为Resource后,通过相对路径,即在根目录下查询获取config.properties文件成功。

这就跟Resource标记产生的作用有关了,将目录标记为Resource后,编译时会将该目录下配置文件拷贝一份到根目录下,即可将Resource标记目录等同于根目录,所以通过相对路径查询时就可以获取到。

展开阅读全文

没有更多推荐了,返回首页