java学习-加载.properties工具类
javaWeb项目,要加载xxx.properties或其它如.txt, .md后缀的文本文件
文本内容有两种格式
key:value或者key=value
诸如Spring框架,Jfinal框架,都是使用java.util.Properties类来加载文本配置文件
Poperties类是按行读取key和value,所以我们写配置文件时,只能一行一个key/value键值对
这些配置文件一般会在编译时打包到WEB-INF/classes/文件夹下
我们要加载时就要通过使用下面方法获取InputStream输入流
# set up mysql driver
# may need auto detect this driver class
jdbc.driver:com.mysql.jdbc.Driver
jdbc.url:jdbc:mysql://localhost:3306/ssm?useUnicode=true&useSSL=false&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
原生读取配置文件
ClassLoader ret = Thread.currentThread().getContextClassLoader();
if(ret==null) {
ret=ClassLoader.getSystemClassLoader();
} InputStream inputStream = ret.getResourceAsStream("mapper/jdbc.properties");
Properties properties=new Properties();
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (inputStream != null)
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();;
}
} System.out.println(properties.getProperty("jdbc.password")); 结果
root
用这种方式读取配置文件有个问题,那就是如果文件使用utf-8编码,而我们windows电脑默认用ISO-8859-1编码,如果读取中文,会发生乱码
在这里spring和jfinal读取配置文件工具类做的优化,会将inputStream转换成new InputStreamReader(inputStream,"UTF-8")使用utf-8编码的字符流读取配置文件,
这样就不会有乱码问题。
改进如下
将第9行的代码替换
properties.load(new InputStreamReader(inputStream, "UTF-8"));
这样读取含有中文的值时,就不会发生报错的
spring读取配置文件的方法
方法1
只是借助ResourceLoader类获得具体的资源文件,classpath表示资源文件是在WEB-INF/classes/下,才底层自动决定用哪种方式加载
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource; Resource resource = new DefaultResourceLoader().getResource("classpath:/mapper/jdbc.properties");
Properties properties1 = new Properties();
try {
properties1.load(new InputStreamReader(resource.getInputStream(), "UTF-8"));
System.out.println(properties1.getProperty("jdbc.password"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
方法2
直接使用class资源加载类,然后调用PropertiesUtils工具类获得Propertiesg类,
这个工具类还可以加载xml文件
import java.io.IOException;
import java.util.Properties;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertiesLoaderUtils; Resource res = new ClassPathResource("mapper/jdbc.properties");
try {
System.out.println(res.getFile().getAbsolutePath());
} catch (IOException e1) {
e1.printStackTrace();
} EncodedResource encRes = new EncodedResource(res,"UTF-8");
try {
Properties properties = PropertiesLoaderUtils.loadProperties(encRes);
String jdbc=properties.getProperty("jdbc.password");
System.out.println(jdbc);
} catch (IOException e) {
e.printStackTrace();
} 结果
D:\WorkSpaces\SSMTest\target\classes\mapper\jdbc.properties
root
Jfinal框架是使用PropKit工具类一次加载properties文件后,可以在程序的任何地方使用它
底层实现都是相同的,
加载WEB-INF/classes/目录下的资源文件
import com.jfinal.kit.PropKit;
PropKit.use("config-local.txt");
System.out.println(PropKit.get("devMode"));
PropKit.use("log4j.properties");
System.out.println(PropKit.getProp("log4j.properties").get("log4j.rootLogger"));
System.out.println(PropKit.get("devMode"));
System.exit(0);
有两种情况:
如果只有一个配置文件
默认使用PropKit.get(Key)就可以获得value值
如果有多个配置文件,
要获取对应文件的key值
必须使用
PropKit.getProp(fileName).get(Key),获取以文件名为key的Prop对象来获取对应的值,
如果还是使用PropKit.get(Key),只保存的第一次调用PropKit.use(FileName)的属性值
这个PropKit内部使用ConcurrentHashMap存放多个配置文件的属性
即使所有操作都是线程安全的,检索操作也不需要锁定,并且没有任何支持以阻止所有访问的方式锁定整个表
适用于高并发环境
private static final ConcurrentHashMap<String, Prop> map = new ConcurrentHashMap<String, Prop>();
java学习-加载.properties工具类的更多相关文章
- Android list加载图片工具类
总体思路 Handler + looper + message 核心类 package com.base.imagechoose.util; import android.graphics.Bitma ...
- Java学习笔记七——数组工具类Arrays
数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组.若将里面的方法用熟的话,那开发效率会大大提高.下面介绍其中的方法. List<T> ...
- Java加载Properties配置文件工具类
Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...
- Java开发学习(八)----IOC/DI配置管理第三方bean、加载properties文件
前面的博客都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理? 一.案例:数据源对象管理 本次案例将使用数据源Druid和C3P0来配置学习下. 1.1 环境准备 学习 ...
- 加载Properties文件工具类:LoadConfig
import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; impor ...
- Java Properties工具类详解
1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...
- java加载properties文件的六中基本方式实现
java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过impo ...
- JAVA加载Properties配置资源文件
JAVA加载Properties配置资源文件 制作人:全心全意 配置文件(资源文件):以properties作为拓展名的文件 Java代码是如何加载properties文件的? 必须使用Propert ...
- java加载properties文件的六种方法总结
java加载properties文件的六种方法总结 java加载properties文件的六中基本方式实现 java加载properties文件的方式主要分为两大类:一种是通过import java. ...
随机推荐
- mysql问题处理记录
1.使用 navicate 导出 csv 文件用 excel 打开乱码 由于excel默认编码是gbk,而navicate导出数据默认编码是utf-8,因此... 解决办法: 使用WPS打开文件,然后 ...
- Beta阶段第五篇Scrum冲刺博客-Day4
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 张晨晨:目标增加单词收藏功能 郭琪容:学习收藏功能的实 ...
- noip第20课作业
1. 评学习小标兵 [问题描述] 东东所在的班级有 N 名同学,期末考试进行了数学.语文.英语.地理四门功课的测试.班主任要将这 N 名学生中总分前三名定为本学期的“学习小标兵”.现在给出这N 名学生 ...
- Scala_类
类 简单类 最简单的类的定义形式是: class Test1 { //这里定义类的字段和方法} 可以使用new关键字来生成对象 var test = new Test1() 给类增加字段和方法 Un ...
- 类变量的初始化时机(摘录自java突破程序员基本功德16课)
先看书本的一个例子,代码如下: public class Price { final static Price INSTANCE=new Price(2.8); static double initP ...
- 1.buntu 安装redis
方式一 :apt安装 在 Ubuntu 系统安装 Redi 可以使用以下命令: $sudo apt-get update $sudo apt-get install redis-server 启动 R ...
- php支付宝手机网页支付类实例
<?php $alipayConfig = array( 'key' => 'xxxxx', //买卖安全校验码,用于签名的32位密钥 'transport' => 'https', ...
- Android x86模拟器Intel Atom x86 System Image配置与使用方法
Android x86模拟器Intel Atom x86 System Image配置与使用方法 前言: 大家现在开发使用的Android 模拟器模拟的是 ARM 的体系结构(ar ...
- 第二节:创建模型,使用Code First,配置映射关系
这一节,实现模型的创建,配置映射关系 使用Code First数据迁移. 创建模型 一,首先创建几个接口:实体接口,聚合根接口,值对象接口 1,实体接口: 2,聚合根接口: 3,值对象接口: 二,模型 ...
- 改变PowerDesigner数据模型字体大小
一 改变左侧菜单字体大小Tools----->General------->Fonts-------->根据item选项的不同改变字体的大小 二 改变数据模型Table的字体大小To ...