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

因为是用ServletContext读取文件路径,所以配置文件可以放入在WEB-INF的classes目录中,也可以在应用层级及WEB-INF的目录中。

文件存放位置具体在eclipse工程中的表现是:可以放在src下面,也可放在web-info及webroot下面等。

因为是读取出路径后,用文件流进行读取的,所以可以读取任意的配置文件包括xml和properties。缺点:不能在servlet外面应用读取配置信息。

具体举例如下:

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

private void test1(HttpServletRequest request, HttpServletResponseresponse)

throws ServletException,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只需要以应用demo05/开头具体的部署目录路径即可,如上面的/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";

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文件。

/**

* 获取指定.properties配置文件中所以的数据

* @param propertyName

* 调用方式:

* 1.配置文件放在resource源包下,不用加后缀

* PropertiesUtil.getAllMessage("message");

* 2.放在包里面的

* PropertiesUtil.getAllMessage("com.test.message");

* @return

*/

public static List getAllMessage(String propertyName) {

// 获得资源包

ResourceBundle rb = ResourceBundle.getBundle(propertyName.trim());

// 通过资源包拿到所有的key

Enumeration allKey = rb.getKeys();

// 遍历key 得到 value

List valList = new ArrayList();

while (allKey.hasMoreElements()) {

String key = allKey.nextElement();

String value = (String) rb.getString(key);

valList.add(value);

}

return valList;

}

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

优点是:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息。

缺点:只能加载类classes下面的资源文件。

/**获取的是classes路径下的文件

* 优点是:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息

* 缺点:只能加载类classes下面的资源文件。

* 如果要加上路径的话:com/test/servlet/jdbc_connection.properties

*/

private static void use_classLoador(){

//获取文件流

InputStream is=TestJava.class.getClassLoader().getResourceAsStream("message.properties");

//获取文件的位置

String filePath=TestJava.class.getClassLoader().getResource("message.properties").getFile();

System.out.println(filePath);

}

修改Properties:

/**

* 传递键值对的Map,更新properties文件

* @param fileName

* 文件名(放在resource源包目录下),需要后缀

* @param keyValueMap

* 键值对Map

*/

public static void updateProperties(String fileName, Map keyValueMap) {

//InputStream inputStream =

// PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName); //输入流

String filePath =

PropertiesUtil.class.getClassLoader().getResource(fileName).getFile(); //文件的路径

System.out.println("propertiesPath:" + filePath);

Properties props = new Properties();

BufferedReader br = null;

BufferedWriter bw = null;

try {

// 从输入流中读取属性列表(键和元素对)

br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));

props.load(br);

br.close();

// 写入属性文件

bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath)));

props.clear();// 清空旧的文件

for (String key : keyValueMap.keySet())

props.setProperty(key, keyValueMap.get(key));

props.store(bw, "");

bw.close();

} catch (IOException e) {

System.err.println("Visit " + filePath + " for updating value error");

} finally {

try {

br.close();

bw.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

方法四:getResouceAsStream

XmlParserHandler.class.getResourceAsStream 与 classloader 的不同之处在于使用的是当前类的相对路径。

BufferedReader br=new BufferedReader(

new InputStreamReader(

XmlParserHandler.class.getResourceAsStream("./rain.xml"), //./代表当前目录不写也可以

"GB2312"

)

);

方法五:PropertiesLoaderUtils 工具类

Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件地址加载属性资源。

最大的好处就是:实时加载配置文件,修改后立即生效,不必重启。

private static void springUtil(){

Properties props = new Properties();

while(true){

try {

props=PropertiesLoaderUtils.loadAllProperties("message.properties");

for(Object key:props.keySet()){

System.out.print(key+":");

System.out.println(props.get(key));

}

} catch (IOException e) {

System.out.println(e.getMessage());

}

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

java加载配置文件_Java 读取配置文件的五种方式相关推荐

  1. Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式 1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23);  3.运 ...

  2. java xml 方法_Java读取xml的四种方式

    Java读取xml的四种方式 在平时工作中,难免会遇到把 XML 作为数据存储格式.面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML ...

  3. html5页面加载执行动作,页面加载完成后执行JS的5种方式

    在js和jquery使用中,常用到页面加载完成后执行某一方法.经过整理,大概是五种方式.javascript 1.jQuery的$( function(){} );html 2.jQuery的$(do ...

  4. Unity 加载AssetBundle中AB包的几种方式

    前言: 在unity中创建一个Cube,设置成预制体,生成AssetBundle中AB包,生成包代码如下: BuildPipeline.BuildAssetBundles(dir,BuildAsset ...

  5. java加载xml配置文件_java读取配置文件的几种方法

    原标题:java读取配置文件的几种方法 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring ...

  6. java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...

    尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...

  7. java map 迭代遍历_java 遍历Map的四种方式

    java 遍历Map的四种方式 CreationTime--2018年7月16日16点15分 Author:Marydon 一.迭代key&value 第一种方式:迭代entrySet 1.方 ...

  8. java实现多线程抢单_JAVA实现多线程的四种方式

    JAVA多线程实现方式: 1.继承Thread类(无返回值) 2.实现Runnable接口(无返回值) 3.实现Callable接口,通过FutureTask包装器来创建Threak线程(有返回值) ...

  9. java如何遍历树_java 遍历树的四种方式

    java 遍历树的四种方式 最近做一个玫瑰图报表,数据源为TreeJson(树状json),在网上搜集下资料,和大家分享.: 先序遍历 中序遍历 后序遍历 层次遍历 public class Tree ...

最新文章

  1. 基于python的分类预测_机器学习算法(五): 基于支持向量机的分类预测
  2. 你所不知道的SCI, SCIE, 和ESCI
  3. TPOT: 自动化的sklearn
  4. 六分钟学会创建Oracle表空间的步骤
  5. ASIC设计的一些软件
  6. hdu 3622 Bomb Game【二分+2-SAT+tarjan】
  7. python3.7安装turtle步骤-Python怎么引入turtle
  8. python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?
  9. Entity Framework Core 使用HiLo生成主键
  10. 【项目调研+论文阅读】基于BERT的中文命名实体识别方法[J] | day6
  11. 天津大学财务报表分析答案合集
  12. 长视频优化:如何高效减少转码耗时
  13. 电商物流仓储流程图模板分享
  14. 现代家用计算机有哪些名称,世界上第一台现代电子计算机是什么?
  15. 浅谈游戏《Cuphead茶杯头》
  16. 【论文阅读】Squeeze-and-Attention Networks for Semantic Segmentation(CVPR2020)
  17. Matlab+Robotic toolbox (各版本免费获取,及安装步骤)
  18. 【直播活动】阿里巴巴开源大家族加入中科院开源之夏2022
  19. 计算机毕业设计java+ssm二手书交易管理系统(源码+系统+mysql数据库+Lw文档)
  20. 推荐5个好玩且有趣的 Python 实战脚本

热门文章

  1. iPhone应用中APNS推送通知流程代码实现案例
  2. Shell 单行注释与多行注释
  3. MariaDB Audit  Statistics
  4. WebAPP ViewPort iPhone5 黑边解决方案
  5. Java 蹒跚自学之 第八日 数组 二分查找法
  6. 数据库是.frm,.myd,myi备份如何导入mysql (转)
  7. Elegant Gnome Pack - 桌面环境
  8. SQL多条件查询拼接in中条件方法
  9. C#l操作Exce知识点
  10. 前端基础知识(持续更新中)