首页 > 编程语言 >Java代码读取properties配置文件

Java代码读取properties配置文件

时间:2023-05-02 21:58:53浏览次数:60  
标签:Java 配置文件 Properties static key import properties

读取properties配置文件

package com.easycrud.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @BelongsProject: EasyCrud
 * @BelongsPackage: com.easycrud.utils
 * @Author: xpx
 * @Email: [email protected]
 * @CreateTime: 2023-05-02  16:05
 * @Description: 读取properties配置文件工具类
 * @Version: 1.0
 */

public class PropertiesUtils {
    private static Properties props = new Properties();
    private static Map<String,String> PROPER_MAP = new ConcurrentHashMap<String, String>();

    /**
     * 项目初始化时就去读取配置文件
     */
    static {
        InputStream is = null;
        try{
            is = PropertiesUtils.class.getClassLoader().getResourceAsStream("application.properties");
            props.load(is);

            Iterator<Object> iterator = props.keySet().iterator();
            while (iterator.hasNext()){
                String key = (String) iterator.next();
                PROPER_MAP.put(key,props.getProperty(key));
            }
        }catch (Exception e){

        }finally {
            if (is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 对外提供方法通过key取值
     * @param key
     * @return
     */
    public static String getString(String key) {
        return PROPER_MAP.get(key);
    }

    /**
     * 测试能否成功取值
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("测试打印:"+getString("db.driver.name"));
    }
}

新手引导

Properties

Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。

ConcurrentHashMap

HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占,相当于所有线程进行读写时都去竞争一把锁,导致效率非常低下。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,允许多个修改操作并发进行,其关键在于使用了锁分段技术。它使用了多个锁来控制对hash表的不同部分进行的修改。对于JDK1.7版本的实现, ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的Hashtable,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点)。

static

static代码块一般用于初始化类中的静态变量,该静态代码块在类加载过程中的初始化阶段执行,并且只执行一次。

InputStream

字节输入流。

try...cache...finally

try{

​ 可能发生异常的代码

}catch(可能发生的异常类型 异常对象名){

​ 当前异常类型的处理方式

}finally{

​ 一定要执行的代码

}

IOException

IOException 是在使用流、文件和目录访问信息时引发的异常的基类

e.printStackTrace()

在命令行打印异常信息在程序中出错的位置及原因。

Class.getClassLoader().getResourceAsStream()

Class是当前类的Class对象,Class.getClassLoader()是获取当前类的类加载器。类加载器的大概作用是当需要使用一个类时,加载该类的".class"文件,并创建对应的class对象,将class文件加载到虚拟机的内存。getResourceAsStream()是获取资源的输入流。类加载器默认是从classPath路径加载资源。

load()

Properties的方法是逐行读取properties配置文件,分隔成两个字符串key和value,将他们放进Properties对象中。

Iterator

迭代器 it 的三个基本操作是 next 、hasNext 和 remove。

调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。

调用 it.hasNext() 用于检测集合中是否还有元素。

调用 it.remove() 将迭代器返回的元素删除。

keySet()

如果有一个Map对象,可以使用 map.keySet()方法获取所有的key值。

A=xxx.iterator()

获取迭代器保存在A中。

标签:Java,配置文件,Properties,static,key,import,properties
From: https://www.cnblogs.com/LoginX/p/Login_X72.html

相关文章

  • java基于springboot+vue前后端分离的超市进销存系统管理系统、超市管理系统,附源码+数
    1、项目介绍超市进销存系统,通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括:首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、商品信息管理、采购信息管理、入库信息管理、出库信息管理、销......
  • java操作Set集合
    java操作Set集合 importjava.util.HashSet;importjava.util.Set;publicclassSetExample{publicstaticvoidmain(String[]args){//创建一个HashSet对象Set<String>set=newHashSet<>();//添加元素......
  • 浅聊Java核心技术之高可扩展利器SPI
    SPI的概念JAVASPI =基于接口的编程+策略模式+配置文件的动态加载机制SPI的使用场景Java是一种面向对象语言,虽然Java8开始支持函数式编程和Stream,但是总体来说,还是面向对象的语言。在使用Java进行面向对象开发时,一般会推荐使用基于接口的编程,程序的模块与模块之前不会直接进行......
  • JAVA中的内存分配
    JAVA中的内存分配栈:方法运行时使用的内存,比如main方法的运行,进入方法栈中执行堆:存储对象或数组,new来创建的,都存储在堆内存中方法区:存储可以运行的class文件本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关寄存器:给CPU使用 总结:只要是new出来的一定在堆里面开......
  • nacos1.4读取properties配置文件中的数组对象,实现动态更新
     方法一:不可自动更新配置,有待检查。packagecom.javaweb.admin.config;importcom.alibaba.nacos.api.config.ConfigType;importcom.alibaba.nacos.api.config.annotation.NacosConfigurationProperties;importlombok.Data;importorg.springframework.context.annotat......
  • Java的对象包装器 & 自动装箱
    有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。通常,这些类被称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean(前6个类派生于公......
  • Mapreduce二次排序时,将jar包上传至Hadoop上运行时,抛出异常"java.util.NoSuchElementEx
    查询原因后发现是java中实现实现Mapper时StringTokenizer类时使用了一个方法nextToken()会抛出这个异常,”我们可以使用hasMoreTokens()和hasMoreElements()方法来避免异常。如果标记器的字符串中有更多标记可用,则这两种方法都返回true。只有当hasMoreTokens()方法返回Tr......
  • java 类继承关系
    获取继承关系java中没有多继承,故一个类最多只有一个父类,但可实现多个接口.利用反射可获取类的信息(属性,方法,继承关系)获取类自身Classcz1=String.class;Classcz2="abc".getClass();Classcz3;try{cz3=Class.forName("java.lang.String");}catch......
  • Java cmd下编译乱码问题解决办法
    1、报错样式 2、解决办法1)指定字符集,如下 2)修改编码格式通过“记事本”打开—》另存为3)修改环境变量此电脑——》属性——》高级系统设置——》环境变量——》(系统环境变量)新建——》“JAVA_TOOL_OPTIONS” “-Dfile.encoding=UTF-8”如下图:——》重启cmd,再......
  • Java面向对象
     Java面向对象:封装,继承,多态(对像上转型),抽象每一个对象都有两个特征:属性(成员变量),行为(成员方法) 继承:被继承的类叫父类,反之为子类(关键字:extends)class子类extends父类  (注:Java语言只支持单重继承){……} 如果父类和子类中都定义了初始化器,则构造子类对象时,调用顺序为:......