java程序中classpath到底可不可以用
2019-03-29 本文已影响0人
持戒行善
一.在springMVC中classpath经常可以看到,而且配置文件只要在源代码目录下,我们用calsspaht:配置文件名 都可以找到,可以说是非常方便。在java 程序中如何使用calsspath这种定位方式快速找到配置文件呢?
首先我们来回顾一下,java 的路径有哪几种
1.基于uri的绝对路径
2.基于磁盘的绝对路径
3.基于项目的相对路径
4.基于classPath的相对路径
二.而我们这里就是用的基于calssPath的相对路径,在使用classpath的相对路径的前提条件是吧配置文件放在源代码目录下,直接放在项目目录下是访问不到的(如果真的放在项目目录是推荐使用基于项目的相对路径,后面会提到),接下来在使用时,不像springmvc 那种要写classpath:配置文件名(写了会报错),而是直接使用配置文件名,配置文件相对于类文件又分以下四种情况:
1: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("myfile.xml");
2:在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("file/myfile.xml");
3:不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("/com/x/file/myfile.xml");
4.新建config源代码目录,和其他类文件不在一个文件夹下面
那么,应该有如下代码:
me.class.getResourceAsStream("/myfile.xml"); //注意前面有个/ 没有这个就是第一种情况了
三.介绍完classpath再来看一看基于项目 的相对路径

这种情况下可以用:
ins=new BufferedInputStream(new FileInputStream("config/name.properties"));
注意config前面没有/ ,因为是相对项目目录,加上就不是相对了会报错的,为了加深印象下面我在举一个例子:

这种情况下可以用:
ins=new BufferedInputStream(new FileInputStream("name.properties"));
同样要注意的是前面没有/ ,因为是相对项目目录,加上就不是相对了会报错的