通过properties类 读取文件内容

来源:互联网 发布:python 加减法 编辑:程序博客网 时间:2024/06/14 00:37
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);
         }
原创粉丝点击