使用类加载器(ClassLoader)加载配置文件
我们之前就知道Properties是用来读取配置文件的类,但是我们使用Properties读取配置文件之前,我们先要将我们的配置文件加载到内存中来
-
将配置文件加载到内存中来就是将配置文件从硬盘中读取到内存中来,而加载的方式有两种:
方式一: 使用输入流将配置文件加载到内存中来
eg:
package 反射.类加载器加载配置文件;
import java.io.IOException;
import java.util.Properties;
import java.io.FileInputStream;
public class Demo {
public static void main(String[] args) throws IOException {
Properties pros = new Properties();
FileInputStream fis = new FileInputStream("jdbc.properties");
pros.load(fis);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
System.out.println("user = " + user + ",password = " + password);
}
}
方式二: 使用ClassLoader(类加载器)将配置文件加载到内存中来
eg:
package 反射.类加载器加载配置文件;
import java.io.IOException;
import java.util.Properties;
import java.io.InputStream;
public class Demo2 {
public static void main(String[] args) throws IOException {
Properties pros = new Properties();
ClassLoader classLoader = Demo2.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("jdbc.properties");
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
System.out.println("user = " + user + ",password = " + password);
}
}
总结:
- 使用输入流的形式加载文件到内存中时默认是在本项目之下
- 如果是单元测试方法中,而不是main()方法中,那么就是默认在当前module之下
- 通过类加载器的getResourceAsStream()方法来加载文件到内存中默认是在本项目的src之下
- 如果是在单元测试方法中,而不是main()方法中,那么就是在当前module的src之下
- 单元测试方法就是使用@Test注解标签的方法
补充:
我们一般建议将文件存储在项目中的src之下,而不是直接存储在当前项目中,因为以后我们在学习到web前端之后我们部署到Tomcat服务器中之后,本项目之下的配置文件就会缺失,所以我们建议将文件放在项目的src之下
-
那么有的人会提出疑问: “如果我们将文件放到了项目的src之下,但是这个时候我们使用输入流加载文件到内存时怎么办?” 我们知道使用输入流的方式加载文件默认是在当前项目之下查找,那么这个时候我们只要在我们要加载的文件前面加上src/即可
- 那么不就相当于是在当前项目之下的src之下查找了
- eg:
FileInputStream fis = new FileInputStream("src/jdbc.properties");
FileInputStream fis2 = new FileInputStream("src\\jdbc.properties");
|