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输入流

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

原生读取配置文件

 1         ClassLoader ret = Thread.currentThread().getContextClassLoader();
 2         if(ret==null) {
 3             ret=ClassLoader.getSystemClassLoader();
 4         }
 5
 6         InputStream inputStream = ret.getResourceAsStream("mapper/jdbc.properties");
 7         Properties properties=new Properties();
 8         try {
 9             properties.load(inputStream);
10         } catch (IOException e) {
11             e.printStackTrace();
12         }
13         finally {
14             if (inputStream != null)
15                 try {
16                     inputStream.close();
17                 } catch (IOException e) {
18                     e.printStackTrace();;
19                 }
20         }
21
22         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文件后,可以在程序的任何地方使用它

原文地址:https://www.cnblogs.com/gne-hwz/p/10191540.html

时间: 2024-11-06 03:39:06

java学习-加载.properties工具类的相关文章

java动态加载指定的类或者jar包反射调用其方法

序言 有时候,项目中会用到java动态加载指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大降低,更加的模块化,代码利用率更高.模式中的代理模式就用到java的这一机制.下边就让我们通过代码来看看如何实现此功能. 代码详细 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoad

异步线程加载图片工具类

/** * 异步线程加载图片工具类 * 使用说明: * BitmapManager bmpManager; * bmpManager = new BitmapManager(BitmapFactory.decodeResource(context.getResources(), R.drawable.loading)); * bmpManager.loadBitmap(imageURL, imageView); */ public class BitmapManager { private st

java中加载properties的几种方式

1. 使用java.util.Properties类的load()方法(注意点:jdbc.properties这个文件若以此种方式加载,必须要放在类路径下,不然将无法进行加载) InputStream inputStream = new BufferedInputStream(new FileInputStream(new File("jdbc.properties"))); Properties properties =new Properties(); properties.loa

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

数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组.若将里面的方法用熟的话,那开发效率会大大提高.下面介绍其中的方法. List<T> asList(T... a) 作用:将指定数组或数组元素,转换成固定大小的List. 用法: String[] strArr = { "aaa", "bbb", "vvv" }; //用法1:参数是数组引用 List<String> li

java学习笔记之DBUtils工具类

DBUtils工具类 一.介绍 DBUtils是Apache组织开源的数据库工具类. 二.使用步骤 ①.创建QueryRunner对象 ②.调用update()方法或者query()方法执行sql语句 三.构造方法及静态方法 QueryRunner类 1.构造方法 ①.无参构造 QueryRunner qr =new  QueryRunner(); 使用无参构造的时候,调用update方法和query方法时就需要使用带Connection 类型参数的重载形式 ②.有参构造 QueryRunner

Java学习之集合框架工具类

一.Collections Collections中的方法都是静态的 1 void sort(List<? extends Comparable<? super T>> list);//list集合元素必须具备比较性 2 void sort(List<T>,Comparator<? super T> c);//指定比较器,list集合元素可以不具备比较性 1 void swap(List<T>,int i,int j);//位置替换,相当于以下代

Java Properties工具类详解

1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠定了Properties类的本质其实是一个HashTable,那么对于各种工具类的典型特性就是在HashTable的基础之上做各种封装,以降低操作的难度.说白了,本质上还是key = value结构,只不过key和value都是字符串而已.可以理解成为一个简化版的Map<String, String&g

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

java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过import java.util.ResourceBundle类的getBundle(String baseName)方法加载. 注意:一定要区分路径格式 实现代码如下: 1 package com.util; 2 3 import java.io.FileInputStream; 4 import jav

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

java加载properties文件的六种方法总结 java加载properties文件的六中基本方式实现 java加载properties文件的方式主要分为两大类: >一种是通过import java.util.Properties类中的load(InputStream in)方法加载: >另一种是通过import java.util.ResourceBundle类的getBundle(String baseName)方法加载. 注意:一定要区分路径格式 实现代码如下: 1 2 3 4 5