javaWeb项目,要加载xxx.properties或其它如.txt, .md后缀的文本文件

文本内容有两种格式

key:value或者key=value

诸如Spring框架,Jfinal框架,都是使用java.util.Properties类来加载文本配置文件

Poperties类是按行读取key和value,所以我们写配置文件时,只能一行一个key/value键值对

这些配置文件一般会在编译时打包到WEB-INF/classes/文件夹下

我们要加载时就要通过使用下面方法获取InputStream输入流

class.getResourceAsStream(String name)
最后调用Properties.load(InputStream)就可以通过Properties.getProperty(key)获得对应值
具体实例
注意,我们设置资源文件是src/main/resources,,而mapper没有设置为资源文件
/src/main/resources/mapper/jdbc.properties
# 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工具类的更多相关文章

  1. Android list加载图片工具类

    总体思路 Handler + looper + message 核心类 package com.base.imagechoose.util; import android.graphics.Bitma ...

  2. Java学习笔记七——数组工具类Arrays

    数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组.若将里面的方法用熟的话,那开发效率会大大提高.下面介绍其中的方法. List<T> ...

  3. Java加载Properties配置文件工具类

    Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...

  4. Java开发学习(八)----IOC/DI配置管理第三方bean、加载properties文件

    前面的博客都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理? 一.案例:数据源对象管理 本次案例将使用数据源Druid和C3P0来配置学习下. 1.1 环境准备 学习 ...

  5. 加载Properties文件工具类:LoadConfig

    import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; impor ...

  6. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  7. java加载properties文件的六中基本方式实现

    java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过impo ...

  8. JAVA加载Properties配置资源文件

    JAVA加载Properties配置资源文件 制作人:全心全意 配置文件(资源文件):以properties作为拓展名的文件 Java代码是如何加载properties文件的? 必须使用Propert ...

  9. java加载properties文件的六种方法总结

    java加载properties文件的六种方法总结 java加载properties文件的六中基本方式实现 java加载properties文件的方式主要分为两大类:一种是通过import java. ...

随机推荐

  1. Android: Custom View和include标签的区别

    Custom View, 使用的时候是这样的: <com.example.home.alltest.view.MyCustomView android:id="@+id/customV ...

  2. 从kepware定时取web api内容

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. hdu 4901 划分序列使异或和==且和

    http://acm.hdu.edu.cn/showproblem.php?pid=4901 给定一个序列,要求选出两个集合,S和T,要求S中选中的元素的下标都要小于T中元素的下标.并且说S中元素的异 ...

  4. python_运算符与表达式

    运算符与表达式 python运算符 运算符 功能说明 + 算术加法,列表.元组.字符串合并与连接,正号 - 算术减法,集合差集,相反数 * 算术乘法,序列重复 / 真除法 // 求整商,但如果操作数中 ...

  5. php apache

    php与Apache配置基础知识 1.在 AllowOverride 设置为 None 时,.htaccess 文件将被完全忽略.当此指令设置为All时,所有具有“.htaccess” 作用域的指令都 ...

  6. ASP.NET MVC Area 区域

    大型网站或项目通常有很多子系统或功能模块,如大型网站可能包含酒店.旅游.机票子系统,通过二级域名来访问,或者一个网站的前台和后台模块,每个团队负责某一子系统或模块,为了各团队进行协同开发,我们可以分不 ...

  7. string转Date转回String(JAVA)

    String dateString = "2012-12-06 ";   SimpleDateFormat sdf = new SimpleDateFormat("yyy ...

  8. spring项目读取配置的demo

    背景 读取配置是基础能力,研发这个模式不错,可以从不同配置中读取数据,如下图: 可以根据不同分类的文件来管理配置,然后统一在conf中配置哪些文件 package com.jwen.platform. ...

  9. Hive Bug修复:ORC表中array数据类型长度超过1024报异常

    目前HVIE里查询如下语句报错: select * from dw.ticket_user_mtime limit 10; 错误如下: 17/07/06 16:45:38 [main]: DEBUG ...

  10. 一些小案例_C#

    下面是一些小的案例.(C#) 1,求一段数第n位 //1 1 2 3 5 8 求30位 //规律是前两位之和是第三位数, ;//定义第一位 ;//定义第二位 ;//总和 ; i < ; i++) ...