通过properties类 读取文件内容

java项目中Classpath路径到底指的是哪里?



1、src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是资源目录, 客户端不能直接访问。


2、WEB-INF/classes目录存放src目录java文件编译之后的class文件,xml、properties等资源配置文件,这是一个定位资源的入口。


3、引用classpath路径下的文件,只需在文件名前加classpath:


<param-value>classpath:applicationContext-*.xml</param-value> 
<!-- 引用其子目录下的文件,如 -->
<param-value>classpath:context/conf/controller.xml</param-value>


4、lib和classes同属classpath,两者的访问优先级为: lib>classes。


5、classpath 和 classpath* 区别:


classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。




Maven项目中获取classpath和资源文件的路径


假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/Java/下, 那么java文件夹和resources文件夹在运行时就是classpath的真实位置,如果
有一个文件位于 src/main/resources/test.txt
有一个类位于 src/main/java/com/qunar/MyClass.java
FILE_NAME = "test.txt"
通过如下代码
MyClass.class.getClassLoder().getResource(FILE_NAME).getPath();
可以直接获取文件路径
而classpath可以通过如下代码获取
MyClass.class.getClassLoder().getResource("").getPath();
 
还有一种方法可以通过当前类的加载路径使用相对路径来获取资源地址
MyClass.class.getResource(FILE_NAME).getPath()
那么这种就会有问题,因为此时的路径是相对于MyClass这个类在运行时路径而言的,test.txt和MyClass并不在一个层级,因为MyClass之前还有两个包
可以如下解决
MyClass.class.getResource(File.separator + "FILE_NAME").getPath(); // 这种方法相当于使用绝对运行时路径


MyClass.class.getResource(".." + File.separator + ".." + File.separator + FILE_NAME).getPath(); // 这种方法相当于使用相对MyClass的运行时路径






这里才是精华!!!!


通过properties 读取文件内容
首先properties 放置的目录根据项目不同放置位置不同
  maven项目 直接放到resource下,java放到src下

方法一
使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法
示例: InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
Properties p = new Properties();
p.load(in);

方法二
使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法
示例: InputStream in = ClassLoader.getSystemResourceAsStream(name);
Properties p = new Properties();
p.load(in);


然后使用以下方法获取属性内容
  Enumeration enum1 = p.propertyNames();//得到配置文件的名字
         while(enum1.hasMoreElements()) {
              String strKey = (String) enum1.nextElement();
              String strValue = p.getProperty(strKey);
              System.out.println(strKey + "=" + strValue);
         }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值