java加载配置文件

转载自http://blog.163.com/wb_zhaoyuwei/blog/static/183075439201261764454791/

当我们自己的程序需要处理配置文件时(比如xml文件或properties文件),通常会遇到两个问题:

  (1)我的配置文件应该放在哪里?

  (2)怎么我的配置文件找不到了?

对于第一个问题,答案是:请将你的资源文件放在classpath里,如果资源文件在jar中,请将该jar文件也加到classpath里面。

对于第二个问题,就得看你是使用的是哪个类(Class还是ClassLoader)来加载资源文件了,所以接下来分别讨论一下Class类和ClassLoader类对于资源文件的加载机制。

(一)用Class类加载资源文件

通过调用Class类的getResourceAsStream方法来加载资源文件:

通常用得较多的是JdbcUtil.class.getResourcrAsStream("/database.properties");

public InputStream getResourceAsStream(String pathToConfigFile);

该方法接收一个String类型的参数(pathToConfigFile)来表示资源文件的地址,如果加载成功,则返回该资源文件的输入流(InputStream),如果失败,则返回null。

重要的是,在传入pathToConfigFile参数时,有两种方式,

第一种方式为绝对定位方式,即pathToConfigFile以"/"开头,此时Java以classpath为根目录,直接加上pathToConfigFile来搜索资源文件。

第二种方式为相对定位方式,即pathToConfigFile不以"/"开头,此时资源文件的全路径应该为:调用getResourceAsStream方法的类的package路径加上pathToConfigFile。(在将package转为目录时将"."变成"/")

(二)用ClassLoader类加载资源文件

ClassLoader类也提供和Class类相同的加载方法:

public InputStream getResourceAsStream(String pathToConfigFile);

用ClassLoader加载配置文件时,pathToConfigFile均不能以"/"开头,在查找时直接在classpath下进行查找。Class类在查找资源文件时,也是代理(delegate)给ClassLoader完成查找功能的,请参考Java官方文档

InputStream input = this.getClass().getClassLoader().getResourceAsStream("resources/config.properties");
 InputStream input = ClassLoader.getSystemResourceAsStream("resources/config.properties");
InputStream input = ClassLoader.getSystemClassLoader().getResourceAsStream("resources/config.properties");
时间: 2024-10-25 20:01:38

java加载配置文件的相关文章

Java 加载配置文件的方式

一 使用原生方式读取配置文件 1 文件系统加载 Java代码 InputStream in = new FileInputStream("config.properties"); Properties p = new Properties(); p.load(in); 2 类加载方式 A 与类同级目录 Java代码 InputStream in = Main.class.getResourceAsStream("config.properties"); B 在类的下

避免缓存,Java动态加载配置文件

Java动态加载配置文件 关键:每次读取都要重新生成流 今天无意间在项目的代码中看到如下这样一段简单加载配置文件的代码: Properties prop = new Properties(); InputStream in = PropertiesTest.class.getClassLoader().getResourceAsStream("/config.properties"); prop.load(in); 其实代码本身是没有什么问题的 问题就是用这种方式来读取配置文件,会存在

Spring4.1使用c3p0加载配置文件连接数据库,Access denied for user 'root'@'localhost' 错误!

db.properties jdbc.user=root jdbc.password=admin jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc\:mysql\:///spring4 jdbc.initialPoolSize=5 jdbc.maxPoolSize=10 Spring.xml中 <context:property-placeholder location="classpath:db.properties&quo

【Nutch2.2.1源码分析之一】Nutch加载配置文件的方法

1.NutchConfiguration.java用于加载及获取Nutch的相关参数. Utility to create Hadoop Configurations that include Nutch-specific  resources. 即它会加载hadoop及nutch中的参数文件. 关键是2个create()方法,它加载了参数文件的同时,又返回了Configuration对象. 2.不带参数的create方法 public static Configuration create()

加载配置文件.properties,及面向接口编程的DaoFactory

1 package cn.itcast.usermng.dao; 2 3 import java.io.InputStream; 4 import java.util.Properties; 5 6 /** 7 * 通过配置文件得到dao实现类的名称! 8 * 通过类名称,完成创建类对象!(反射完成的!) 9 * @author cxf 10 * 11 */ 12 public class DaoFactory { 13 private static Properties props = nul

java加载property文件配置

1 properties简介: properties是一种文本文件,内容格式为:     key = value     #单行注释 适合作为简单配置文件使用,通常作为参数配置.国际化资源文件使用. 对于复杂的配置,就需要使用XML.YML.JSON等了 2 java加载Properties: java加载properties主要通过2个util包下的工具类: Properties类. ResourceBundle类 2.1 通过Properties类加载: Properties类通过load(

java加载资源文件

className.class.getResourceAsStream 用法: 第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties 那么,应该有如下代码: //前面没有"/"代表当前类的目录 InputStream is1 = Test.class.getResourceAsStream("config.properties"); System.out.printl

smarty加载配置文件和读取其中的参数

加载配置文件 在smarty中通过{config_load}加载配置文件. 属性: 参数名称 类型 必选参数 默认值 说明 file string Yes n/a 载入的配置文件名 section string No n/a 指定载入配置变量的段落 scope string no local 配置变量的作用范围,取值local, parent 或 global. local表示变量只能在当前模板的上下文中使用. parent表示变量可以在当前模板和父模板使用. global表示变量在任何地方都可

spring加载配置文件

spring加载配置文件 1.把applicationContext.xml直接放在WEB-INF/classes下,spring会采用默认的加载方式2.采用在web.xml中配置ContextLoaderListenera或ContextLoaderServlet指定加载路径方式.3 通过ClassPathXmlApplicationContext或XmlWebApplicationContext代码动态加载!