转载:http://blog.csdn.net/gaogaoshan/article/details/8605887

 
 

方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。

因为是用ServletContext读取文件路径,所以配置文件可以放入在web-info的classes目录中,也可以在应用层级及web-info的目录中。文件存放位置具体在eclipse工程中的表现是:可以放在src下面,也可放在web-info及webroot下面等。因为是读取出路径后,用文件流进行读取的,所以可以读取任意的配置文件包括xml和properties。缺点:不能在servlet外面应用读取配置信息。

具体举例如下:

//ServletContext.getRealPath(name)读取路径

privatevoid test1(HttpServletRequest request, HttpServletResponseresponse)

throwsServletException,IOException {

//response.setContentType("text/html;charset=utf-8");

String path = "/WEB-INF/jdbc_connection.properties"; //读取WEB-INF中的配置文件

String realPath = getServletContext().getRealPath(path);//getServletContext()相当于http://localhost/demo05

//所以后面的path只需要以应用demo/开头具体的部署目录路径即可,如上面的/web-in…

System.out.println(realPath);

InputStreamReader reader =new InputStreamReader(newFileInputStream(realPath),"utf-8");

Properties props = new Properties();

props.load(reader); //load个人建议还是用Reader来读,因为reader体系中有个InputStreamReader可以指定编码

String jdbcConValue = props.getProperty("jdbc_con");

System.out.println(jdbcConValue);

System.out.println("加载src包下的资源------------------------");

path = "/WEB-INF/classes/com/test/servlet/jdbc_connection.properties"; //读取WEB-INF中的配置文件

realPath=getServletContext().getRealPath(path);

System.out.println(realPath);

reader = new InputStreamReader(new FileInputStream(realPath),"utf-8");

props.load(reader); //load个人建议还是用Reader来读,因为reader体系中有个InputStreamReader可以指定编码

jdbcConValue = props.getProperty("jdbc_con");

System.out.println("second::"+jdbcConValue);

}

方式二:采用ResourceBundle类读取配置信息,

优点是:可以以完全限定类名的方式加载资源后,直接的读取出来,且可以在非Web应用中读取资源文件。

缺点:只能加载类classes下面的资源文件且只能读取.properties文件。

  1. /**
  2. * 获取指定配置文件中所以的数据
  3. * @param propertyName
  4. *        调用方式:
  5. *            1.配置文件放在resource源包下,不用加后缀
  6. *              PropertiesUtil.getAllMessage("message");
  7. *            2.放在包里面的
  8. *              PropertiesUtil.getAllMessage("com.test.message");
  9. * @return
  10. */
  11. public static List<String> getAllMessage(String propertyName) {
  12. // 获得资源包
  13. ResourceBundle rb = ResourceBundle.getBundle(propertyName.trim());
  14. // 通过资源包拿到所有的key
  15. Enumeration<String> allKey = rb.getKeys();
  16. // 遍历key 得到 value
  17. List<String> valList = new ArrayList<String>();
  18. while (allKey.hasMoreElements()) {
  19. String key = allKey.nextElement();
  20. String value = (String) rb.getString(key);
  21. valList.add(value);
  22. }
  23. return valList;
  24. }

方式三:采用ClassLoader方式进行读取配置信息

优点是:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息
 缺点:只能加载类classes下面的资源文件。
  1. /**获取的是class的根路径下的文件
  2. * 优点是:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息
  3. * 缺点:只能加载类classes下面的资源文件。
  4. * 如果要加上路径的话:com/test/servlet/jdbc_connection.properties
  5. */
  6. private static void use_classLoador(){
  7. //文件在class的根路径
  8. InputStream is=TestJava.class.getClassLoader().getResourceAsStream("message.properties");
  9. //获取文件的位置
  10. String filePath=TestJava.class.getClassLoader().getResource("message.properties").getFile();
  11. System.out.println(filePath);
  12. //获取的是TestJava类所在的相对路径下 ,com/test/servlet/jdbc_connection.properties"
  13. //      InputStream is2=TestJava.class.getResourceAsStream("message.propertie");
  14. BufferedReader br= new BufferedReader(new InputStreamReader(is));
  15. Properties props = new Properties();
  16. try {
  17. props.load(br);
  18. for (Object s : props.keySet())
  19. System.out.println(s);
  20. } catch (IOException e) {   e.printStackTrace();}
  21. }

方法4 getResouceAsStream

XmlParserHandler.class.getResourceAsStream 与classloader不同
使用的是当前类的相对路径
  1. BufferedReader br=new BufferedReader(
  2. new InputStreamReader(XmlParserHandler.class.
  3. getResourceAsStream("./rain.xml"), "GB2312"));// ./代表当前目录不写也可以
  4. InputSource is=new InputSource(br);//数据源

方法5 PropertiesLoaderUtils工具类

 
  1. /**
  2. * Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件地址加载属性资源
  3. * 最大的好处就是:实时加载配置文件,修改后立即生效,不必重启
  4. */
  5. private static void springUtil(){
  6. Properties props = new Properties();
  7. while(true){
  8. try {
  9. props=PropertiesLoaderUtils.loadAllProperties("message.properties");
  10. for(Object key:props.keySet()){
  11. System.out.print(key+":");
  12. System.out.println(props.get(key));
  13. }
  14. } catch (IOException e) {
  15. System.out.println(e.getMessage());
  16. }
  17. try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}
  18. }
  19. }

修改Properties

  1. /**
  2. * 传递键值对的Map,更新properties文件
  3. *
  4. * @param fileName
  5. *            文件名(放在resource源包目录下),需要后缀
  6. * @param keyValueMap
  7. *            键值对Map
  8. */
  9. public static void updateProperties(String fileName,Map<String, String> keyValueMap) {
  10. //getResource方法使用了utf-8对路径信息进行了编码,当路径中存在中文和空格时,他会对这些字符进行转换,这样,
  11. //得到的往往不是我们想要的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的中文及空格路径。
  12. String filePath = PropertiesUtil.class.getClassLoader().getResource(fileName).getFile();
  13. Properties props = null;
  14. BufferedWriter bw = null;
  15. try {
  16. filePath = URLDecoder.decode(filePath,"utf-8");
  17. log.debug("updateProperties propertiesPath:" + filePath);
  18. props = PropertiesLoaderUtils.loadProperties(new ClassPathResource(fileName));
  19. log.debug("updateProperties old:"+props);
  20. // 写入属性文件
  21. bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath)));
  22. props.clear();// 清空旧的文件
  23. for (String key : keyValueMap.keySet())
  24. props.setProperty(key, keyValueMap.get(key));
  25. log.debug("updateProperties new:"+props);
  26. props.store(bw, "");
  27. } catch (IOException e) {
  28. log.error(e.getMessage());
  29. } finally {
  30. try {
  31. bw.close();
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }
 
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

java读取配置文件(转)的更多相关文章

  1. java读取配置文件的几种方法

    java读取配置文件的几种方法 原文地址:http://hbcui1984.iteye.com/blog/56496         在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配 ...

  2. Java读取配置文件的方式

    Java读取配置文件的方式-笔记 1       取当前启动文件夹下的配置文件   一般来讲启动java程序的时候.在启动的文件夹下会有配置文件 classLoader.getResource(&qu ...

  3. java读取配置文件

    java 读取文件可以用字节流和字符流. 由于一个汉字占两个字节,所以如果配置文件中有汉字,用字节流读取,会出现乱码. 用字符流则不会出现乱码. 配置文件 b.properties 文件如下: fam ...

  4. Java 读取配置文件数据

    Properties类 Properties类,是一个工具类,包含在java.util包中. 功能:可以保存持久的属性,通常用来读取配置文件或者属性文件,将文件中的数据读入properties对象中, ...

  5. java读取配置文件方法以及工具类

    第一种方式 : java工具类读取配置文件工具类 只是案例代码  抓取异常以后的代码自己处理 import java.io.FileNotFoundException; import java.io. ...

  6. java读取配置文件内容

    利用com.typesafe.config包实现 <dependency> <groupId>com.typesafe</groupId> <artifact ...

  7. spring boot使用java读取配置文件,DateSource测试,BomCP测试,AnnotationConfigApplicationContext的DataSource注入

    一.配置注解读取配置文件         (1)@PropertySource可以指定读取的配置文件,通过@Value注解获取值   实例:           @PropertySource(val ...

  8. 使用Java读取配置文件

    实现起来,相对比较简单,留个备案吧,废话也不多说,请看代码: package com.jd.***.config; import org.junit.*; import java.io.IOExcep ...

  9. 转:java读取配置文件的几种方法

    转自: http://www.iteye.com/topic/56496 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小 ...

随机推荐

  1. vue - (v-pre、v-cloak、v-once)

    1.v-pre,不和绑定的数据冲突,也就是不用它们的值 2.v-cloak,和css样式一起用,vue渲染未完成不显示 3.v-once,只渲染DOM第一次渲染的值,以后不会改变了(你不要刷新网页,然 ...

  2. vue - webpack.dev.conf.js for merge

    webpack-merge提供了一个merge连接数组并合并创建新对象的对象的函数.如果遇到函数,它将执行它们,通过算法运行结果,然后再次将返回的值包装在函数中. 这种行为在配置webpack时特别有 ...

  3. background-position 之剑走偏锋

    转自:http://www.cnblogs.com/yizuierguo/archive/2009/03/10/1407860.html 在设置background-image属性时,经常会遇到一个b ...

  4. 站点搭建从零開始(五) WordPress的安装

    前面说了非常多废话.如今最终转到正题.WordPress的安装. 1.WordPress安装非常easy 假设你的server能通过应用中心一键安装WordPress,这一节就非常轻松了,基本上不须要 ...

  5. 微信小程序之趣闻

    代码地址如下:http://www.demodashi.com/demo/13433.html 前言 小程序 的火热程度我就不多说了,我之前对这个就蛮有兴趣的,于是花了大概5天的时间,完成了 学习-入 ...

  6. Python-PyQt4学习笔记

    1.每个应用必须创建一个 QtGui.QApplication(sys.argv), 此时 QtGui.qApp 为此应用的实例 app = QtGui.QApplication(sys.argv) ...

  7. Arm Cache学习总结

    cache,高速缓存,其原始意义是指访问速度比一般随机存取内存(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术. 1.cache映射方式 cache中 ...

  8. CentOS搭建nginx与nginx-rtmp-module搭建流媒体服务器

    文章地址:http://blog.csdn.net/zph1234/article/details/52846223 本次搭建流媒体使用的环境是centos 7.0+nginx:让我们一起开始奇妙的流 ...

  9. SQL中intersect、union、minus和except 运算符

    1.intersect运算符intersect运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表.当 ALL 随 INTERSECT 一起使用时 (inte ...

  10. EMQ -- 用户密码认证

    emq 的用户密码认证 MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous) ...