Javaweb项目中使用properties.load(new FileInputStream(“src\jdbc.properties”));加载文件时,出现文件没有找到的异常(java.io.FileNotFoundException: src\jdbc.properties (系统找不到指定的路径。))。
经查阅,发现Javaweb项目在部署时会将src目录下的文件自动部署到classes目录下的(结构如下图)。而我们使用上述代码运行时,会去src目录下找jdbc.properties,而我们classes目录下并没有这个目录,所以会出现FileNotFoundException。
解决方法一:
直接使用绝对路径来定位jdbc.properties这个文件。
解决办法二:(推荐使用)
我们使用类加载器来获取到该文件的输入流。
InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(inputStream);
上述代码的解析:
1、JdbcUtils.class.getClassLoader()是获取当前类的类加载器。类加载器的大概作用是当需要使用一个类时,加载该类的".class"文件,并创建对应的class对象,将class文件加载到虚拟机的内存。
2、getResourceAsStream()是获取资源的输入流。类加载器默认是从classPath路径加载资源。
classPath目录:web项目运行时,IDE编译器会把src下的一些资源文件移至WEB-INF/classes,classes目录就是classPath目录。该目录放的一般是web项目运行时的class文件、资源文件(xml,properties等)。