Class Setting

All Implemented Interfaces:
Serializable, Map<String,String>, org.miaixz.bus.core.lang.getter.GroupedTypeGetter<CharSequence,CharSequence>, org.miaixz.bus.core.lang.getter.TypeGetter<CharSequence>

public class Setting extends AbstractSetting implements Map<String,String>
设置工具类。 用于支持设置(配置)文件 用于替换Properties类,提供功能更加强大的配置文件,同时对Properties文件向下兼容
  1、支持变量,默认变量命名为 ${变量名},变量只能识别读入行的变量,例如第6行的变量在第三行无法读取
  2、支持分组,分组为中括号括起来的内容,中括号以下的行都为此分组的内容,无分组相当于空字符分组,若某个key是name,加上分组后的键相当于group.name
  3、注释以#开头,但是空行和不带“=”的行也会被跳过,但是建议加#
  4、store方法不会保存注释内容,慎重使用
 
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Field Details

    • DEFAULT_CHARSET

      public static final Charset DEFAULT_CHARSET
      默认字符集
    • EXT_NAME

      public static final String EXT_NAME
      默认配置文件扩展名
      See Also:
    • charset

      protected Charset charset
      本设置对象的字符集
    • isUseVariable

      protected boolean isUseVariable
      是否使用变量
    • resource

      protected org.miaixz.bus.core.io.resource.Resource resource
      设定文件的资源
  • Constructor Details

    • Setting

      public Setting()
      空构造
    • Setting

      public Setting(String path)
      构造
      Parameters:
      path - 相对路径或绝对路径
    • Setting

      public Setting(String path, boolean isUseVariable)
      构造
      Parameters:
      path - 相对路径或绝对路径
      isUseVariable - 是否使用变量
    • Setting

      public Setting(String path, Charset charset, boolean isUseVariable)
      构造,使用相对于Class文件根目录的相对路径
      Parameters:
      path - 相对路径或绝对路径
      charset - 字符集
      isUseVariable - 是否使用变量
    • Setting

      public Setting(File configFile, Charset charset, boolean isUseVariable)
      构造
      Parameters:
      configFile - 配置文件对象
      charset - 字符集
      isUseVariable - 是否使用变量
    • Setting

      public Setting(org.miaixz.bus.core.io.resource.Resource resource, Charset charset, boolean isUseVariable)
      构造
      Parameters:
      resource - Setting的Resource
      charset - 字符集
      isUseVariable - 是否使用变量
  • Method Details

    • of

      public static Setting of()
      构建一个空的Setting,用于手动加入参数
      Returns:
      Setting
    • init

      public boolean init(org.miaixz.bus.core.io.resource.Resource resource, Charset charset, boolean isUseVariable)
      初始化设定文件
      Parameters:
      resource - Resource
      charset - 字符集
      isUseVariable - 是否使用变量
      Returns:
      成功初始化与否
    • load

      public boolean load()
      重新加载配置文件
      Returns:
      是否加载成功
    • autoLoad

      public void autoLoad(boolean autoReload)
      在配置文件变更时自动加载
      Parameters:
      autoReload - 是否自动加载
    • autoLoad

      public void autoLoad(boolean autoReload, Consumer<Boolean> callback)
      在配置文件变更时自动加载
      Parameters:
      autoReload - 是否自动加载
      callback - 加载完成回调
    • getSettingUrl

      public URL getSettingUrl()
      获得设定文件的URL
      Returns:
      获得设定文件的路径
    • getSettingPath

      public String getSettingPath()
      获得设定文件的路径
      Returns:
      获得设定文件的路径
    • size

      public int size()
      键值总数
      Specified by:
      size in interface Map<String,String>
      Returns:
      键值总数
    • getObjByGroup

      public Object getObjByGroup(CharSequence key, CharSequence group, Object defaultValue)
      Specified by:
      getObjByGroup in interface org.miaixz.bus.core.lang.getter.GroupedTypeGetter<CharSequence,CharSequence>
    • getAndRemove

      public String getAndRemove(String... keys)
      获取并删除键值对,当指定键对应值非空时,返回并删除这个值,后边的键对应的值不再查找
      Parameters:
      keys - 键列表,常用于别名
      Returns:
      字符串值
    • getMap

      public Map<String,String> getMap(String group)
      获得指定分组的所有键值对,此方法获取的是原始键值对,获取的键值对可以被修改
      Parameters:
      group - 分组
      Returns:
      map
    • getSetting

      public Setting getSetting(String group)
      获取group分组下所有配置键值对,组成新的Setting
      Parameters:
      group - 分组
      Returns:
      Setting
    • getProperties

      public Properties getProperties(String group)
      获取group分组下所有配置键值对,组成新的Properties
      Parameters:
      group - 分组
      Returns:
      Properties对象
    • getProps

      public Props getProps(String group)
      获取group分组下所有配置键值对,组成新的Props
      Parameters:
      group - 分组
      Returns:
      Props对象
    • store

      public void store()
      持久化当前设置,会覆盖掉之前的设置 持久化不会保留之前的分组,注意如果配置文件在jar内部或者在exe中,此方法会报错。
    • store

      public void store(String absolutePath)
      持久化当前设置,会覆盖掉之前的设置 持久化不会保留之前的分组
      Parameters:
      absolutePath - 设置文件的绝对路径
    • store

      public void store(File file)
      持久化当前设置,会覆盖掉之前的设置 持久化不会保留之前的分组
      Parameters:
      file - 设置文件
    • toProps

      public Props toProps()
      转换为Props对象,原分组变为前缀
      Returns:
      Props对象
    • getGroupedMap

      public GroupedMap getGroupedMap()
      获取GroupedMap
      Returns:
      GroupedMap
    • getGroups

      public List<String> getGroups()
      获取所有分组
      Returns:
      获得所有分组名
    • setVarRegex

      public Setting setVarRegex(String regex)
      设置变量的正则 正则只能有一个group表示变量本身,剩余为字符 例如 \$\{(name)\}表示${name}变量名为name的一个变量表示
      Parameters:
      regex - 正则
      Returns:
      this
    • setCharset

      public Setting setCharset(Charset charset)
      自定义字符编码
      Parameters:
      charset - 字符编码
      Returns:
      this
    • setLogIfNull

      public Setting setLogIfNull(boolean logIfNull)
      设置当获取key对应值为null时是否打印debug日志提示用户
      Parameters:
      logIfNull - 当获取key对应值为null时是否打印debug日志提示用户
      Returns:
      this
    • isEmpty

      public boolean isEmpty(String group)
      某个分组对应的键值对是否为空
      Parameters:
      group - 分组
      Returns:
      是否为空
    • containsKey

      public boolean containsKey(String group, String key)
      指定分组中是否包含指定key
      Parameters:
      group - 分组
      key - 键
      Returns:
      是否包含key
    • containsValue

      public boolean containsValue(String group, String value)
      指定分组中是否包含指定值
      Parameters:
      group - 分组
      value - 值
      Returns:
      是否包含值
    • putByGroup

      public String putByGroup(String key, String group, String value)
      将键值对加入到对应分组中
      Parameters:
      key - 键
      group - 分组
      value - 值
      Returns:
      此key之前存在的值,如果没有返回null
    • remove

      public String remove(String group, Object key)
      从指定分组中删除指定值
      Parameters:
      group - 分组
      key - 键
      Returns:
      被删除的值,如果值不存在,返回null
    • putAll

      public Setting putAll(String group, Map<? extends String,? extends String> m)
      加入多个键值对到某个分组下
      Parameters:
      group - 分组
      m - 键值对
      Returns:
      this
    • addSetting

      public Setting addSetting(Setting setting)
      添加一个Stting到主配置中
      Parameters:
      setting - Setting配置
      Returns:
      this
    • clear

      public Setting clear(String group)
      清除指定分组下的所有键值对
      Parameters:
      group - 分组
      Returns:
      this
    • keySet

      public Set<String> keySet(String group)
      指定分组所有键的Set
      Parameters:
      group - 分组
      Returns:
      键Set
    • values

      public Collection<String> values(String group)
      指定分组下所有值
      Parameters:
      group - 分组
      Returns:
    • entrySet

      public Set<Map.Entry<String,String>> entrySet(String group)
      指定分组下所有键值对
      Parameters:
      group - 分组
      Returns:
      键值对
    • set

      public Setting set(String key, String value)
      设置值
      Parameters:
      key - 键
      value - 值
      Returns:
      this
    • setFields

      public Setting setFields(org.miaixz.bus.core.center.function.SupplierX<String>... fields)
      通过lambda批量设置值 实际使用时,可以使用getXXX的方法引用来完成键值对的赋值:
           User user = GenericBuilder.of(User::new).with(User::setUsername, "bus").build();
           Setting.of().setFields(user::getNickname, user::getUsername);
       
      Parameters:
      fields - lambda,不能为空
      Returns:
      this
    • setByGroup

      public Setting setByGroup(String key, String group, String value)
      将键值对加入到对应分组中 此方法用于与getXXX统一参数顺序
      Parameters:
      key - 键
      group - 分组
      value - 值
      Returns:
      此key之前存在的值,如果没有返回null
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface Map<String,String>
    • containsKey

      public boolean containsKey(Object key)
      默认分组(空分组)中是否包含指定key对应的值
      Specified by:
      containsKey in interface Map<String,String>
      Parameters:
      key - 键
      Returns:
      默认分组中是否包含指定key对应的值
    • containsValue

      public boolean containsValue(Object value)
      默认分组(空分组)中是否包含指定值
      Specified by:
      containsValue in interface Map<String,String>
      Parameters:
      value - 值
      Returns:
      默认分组中是否包含指定值
    • get

      public String get(Object key)
      获取默认分组(空分组)中指定key对应的值
      Specified by:
      get in interface Map<String,String>
      Parameters:
      key - 键
      Returns:
      默认分组(空分组)中指定key对应的值
    • put

      public String put(String key, String value)
      将指定键值对加入到默认分组(空分组)中
      Specified by:
      put in interface Map<String,String>
      Parameters:
      key - 键
      value - 值
      Returns:
      加入的值
    • remove

      public String remove(Object key)
      移除默认分组(空分组)中指定值
      Specified by:
      remove in interface Map<String,String>
      Parameters:
      key - 键
      Returns:
      移除的值
    • putAll

      public void putAll(Map<? extends String,? extends String> m)
      将键值对Map加入默认分组(空分组)中
      Specified by:
      putAll in interface Map<String,String>
      Parameters:
      m - Map
    • clear

      public void clear()
      清空默认分组(空分组)中的所有键值对
      Specified by:
      clear in interface Map<String,String>
    • keySet

      public Set<String> keySet()
      获取默认分组(空分组)中的所有键列表
      Specified by:
      keySet in interface Map<String,String>
      Returns:
      默认分组(空分组)中的所有键列表
    • values

      public Collection<String> values()
      获取默认分组(空分组)中的所有值列表
      Specified by:
      values in interface Map<String,String>
      Returns:
      默认分组(空分组)中的所有值列表
    • entrySet

      public Set<Map.Entry<String,String>> entrySet()
      获取默认分组(空分组)中的所有键值对列表
      Specified by:
      entrySet in interface Map<String,String>
      Returns:
      默认分组(空分组)中的所有键值对列表
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in interface Map<String,String>
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Specified by:
      equals in interface Map<String,String>
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object