JAVA加载properties文件

今天,我们细致的讲讲几乎所有的JAVA Coder都知道的classes和lib目录,以及如何加载properties文件。

首先你需要了解一下,我们的IDE-----Eclipse:

Eclipse 默认是看不见classes目录的,如果在WEB-INF下new一个classes文件夹话会报already exist!说明目录是存在的,可以设置一下让其显示出来。

Eclipse 默认是编译的修改文件,还记得那个Build Automatically选项吗?这个能保证你在修改文件并保存之后,能够将你修改的文件重新输出到classes目录中。一旦你取消这个选项,你就需要自己Build All。

 

另外,经常会看到某些大神在使用project->clean这个按钮,就是因为如果工作空间classes中的文件被删了或是其他的什么异 常导致Elipse不知道,它就不会给你给你编译。导致Elipse源码明明是有这个文件的,而classes文件中却没有。这个时候使用clean就可 以清除并重新编译整个项目。当然也可以在开启自动编译的时候修改目标文件并保存,Eclipse也会帮你重新放到classes中。

 

spring的文件配置中,我们经常会对<value>classpath*:FileName.xml</value>感到困惑,接下来我们解释一下这个classpath:

classpath就是指web-inf文件下的classes目录,而其中

classpath:只会到classes路径中查找
classpath*:不仅包含classes路径,还包括我们的jar文件(架包)中的classes路径进行查找

 

现在再来了解一下编译目录:

1、普通web项目编译完后,可以在工程路径/webapp/WEB-INF中看到classes和lib目录,我们称为编译输出目录。
2、maven项目编译完后,是在工程路径/target中看到 classes,而lib中的jar包是放在maven的本地仓库里。另外,maven项目可以通过install(右键项目run as-->maven install)命令来打包,执行成功后可以在target中看到以artifactId命名的一个war包和一个目录。请注意这不是您的编译输出目录, 它只是一个打包结果,如果修改JAVA代码保存后,看不到改变,只有在target/classes中能看到。
3、tomcat并不是以您的编译输出目录作为项目发布路径,双击tomcat可以看到Server Locations选项,里面默认是以workspace\.metadata\.plugin \org.eclipse.wst.server.core\tmp0作为项目的发布路径,也可以由coder自己配置。在启动服务时,Eclipse会 自动将编译输出目录中的代码放到这个路径中。通常包含META-INF、WEB-INF和web.xml这三个文件。

 

说了这么多,是想让读者搞清楚两点:
1、web项目直接运行main方法(Jetty也类似)和启动服务时的绝对路径是不一样的。前者是编译输出目录,后者是项目发布目录。
2、出现找不到目标文件的时候,去这几个目录看下,是否含有目标文件

 

然后进入正题,JAVA项目获取文件路径大致有一下几种方法:

 

 

 
  1. package com.aikids.login.action;

  2.  
  3. import java.io.IOException;

  4. import java.io.InputStream;

  5. import java.util.Properties;

  6.  
  7.  
  8. public class TestPath {

  9. //静态代码块,当这个类被加载时会执行

  10. static{

  11. System.out.println("进入静态代码块~~");

  12. System.out.println("1:"+TestPath.class.getResource("").getPath());

  13. System.out.println("2:"+TestPath.class.getResource("test.properties").getPath());

  14. System.out.println("3:"+TestPath.class.getClassLoader().getResource("").getPath());

  15. System.out.println("4:"+TestPath.class.getClassLoader().getResource("redis.properties").getPath());

  16. System.out.println("5:"+System.getProperty("user.dir"));

  17. System.out.println("6:"+ClassLoader.getSystemResource(""));

  18.  
  19. InputStream is = TestPath.class.getClassLoader().getResourceAsStream("redis.properties");

  20. Properties p = new Properties();

  21. try {

  22. p.load(is);

  23. System.out.println(p.getProperty("redis.host"));

  24. } catch (IOException e) {

  25. e.printStackTrace();

  26. }

  27. }

  28. }


执行的结果:

main方法方式启动
进入静态方法~~
1:/D:/Temp_Workspace/kbtc/target/classes/com/aikids/login/action/
2:/D:/Temp_Workspace/kbtc/target/classes/com/aikids/login/action/test.properties
3:/D:/Temp_Workspace/kbtc/target/classes/
4:/D:/Temp_Workspace/kbtc/target/classes/redis.properties
5:D:\Temp_Workspace\kbtc

tomcat方式启动
进入静态代码块~~
1:/D:/apache-tomcat-7.0.52/wtpwebapps/kbtc/WEB-INF/classes/com/aikids/login/action/
2:/D:/apache-tomcat-7.0.52/wtpwebapps/kbtc/WEB-INF/classes/com/aikids/login/action/test.properties
3:/D:/apache-tomcat-7.0.52/wtpwebapps/kbtc/WEB-INF/classes/
4:/D:/apache-tomcat-7.0.52/wtpwebapps/kbtc/WEB-INF/classes/redis.properties
5:D:\开发环境\eclipse

首先说一下redis.properties是直接放在在classes文件目录下,test.properties是跟TestPath类放在一个包下。
总结:
1、您会发现两种方式的路径是完全不同,大体上(除开每种的最后两个),main方法是得到编译的输出目录,tomcat是得到项目发布目录。
2、TestPath.class.getResource("").getPath()将会得到TestPath测试类的路径,如果将""替换成文件名字(可以加包名),可以在TestPath测试类下面去帮你找文件。
3、TestPath.class.getClassLoader().getResource("").getPath()将会得到classes路径,如果""替换成文件名字(可以加包名),可以在classes目录下面去帮你找文件。
4、System.getProperty("user.dir")在main启动方式是我的工作空间中的项目路径,tomcat启动方式是我 Eclipse的安装路径,简单的来说就是在哪里执行java 命令,user.dir返回的就是哪里,实际工作中我们也根本用不到这种方式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值