zoukankan      html  css  js  c++  java
  • Properties读取配置文件

    很多时候,我们会把一些设置,环境等数据量不大,而且不经常改变的参数写到配置文件中,然后在程序中读取这些参数。

        读取参数是一个很简单的过程,可以用java.util.Properties来完成。先来看看官方文档:
      Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 

      一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。 

      因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法。但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是 Strings 的项。相反,应该使用 setProperty 方法。如果在“有危险”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。 

      load 和 store 方法按下面所指定的、简单的面向行的格式加载和存储属性。此格式使用 ISO 8859-1 字符编码。可以使用 Unicode 转义符来编写此编码中无法直接表示的字符;转义序列中只允许单个 'u' 字符。可使用 native2ascii 工具对属性文件和其他字符编码进行相互转换。 

      loadFromXML(InputStream) 和 storeToXML(OutputStream, String, String) 方法按简单的 XML 格式加载和存储属性。默认使用 UTF-8 字符编码,但如果需要,可以指定某种特定的编码。XML 属性文档具有以下 DOCTYPE 声明: 

     
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
     注意,导入或导出属性时不 访问系统 URI (http://java.sun.com/dtd/properties.dtd);该系统 URI 仅作为一个惟一标识 DTD 的字符串: 
        
    <?xml version="1.0" encoding="UTF-8"?>
        
    <!-- DTD for properties -->
        
    <!ELEMENT properties ( comment?, entry* ) >
        
    <!ATTLIST properties version CDATA #FIXED "1.0">
        
    <!ELEMENT comment (#PCDATA) >
        
    <!ELEMENT entry (#PCDATA) >
        
    <!ATTLIST entry key CDATA #REQUIRED>

        写一个读取参数的简单的例子:
    package woxingwosu;

    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.util.Properties;

    public class ReadProperties {

        
    public static void main(String[] args) {
            
    //对于XML文件一定要符合http://java.sun.com/dtd/properties.dtd
            String name="woxingwosu.xml";
            Properties prop
    =loadFile(name);
            
    if(prop!=null){
                System.out.println(
    "XMl file");
                System.out.println(
    "no="+prop.getProperty("no"));
                System.out.println(
    "name="+prop.getProperty("name"));
            }
            
            
    //对于非XML文件,key与value之间可以用冒号隔开,也可以用空格隔开
            name="woxingwosu.properties";
            prop
    =loadFile(name);
            
    if(prop!=null){
                System.out.println(
    "Properties file");
                System.out.println(
    "no="+prop.getProperty("no"));
                System.out.println(
    "name="+prop.getProperty("name"));
            }
        }
        
        
    /**
         * 加载配置文件
         * 
    @param path        --文件的路径
         * 
    @param isXmlFile --true:配置文件是XML文件,false:非XML文件
         * 
    @return(Properties)
         
    */
        
    private static Properties loadFile(String path){
            Properties prop
    =null;
            
    try{
                BufferedInputStream inBuff
    =new BufferedInputStream(new FileInputStream(path));
                prop
    =new Properties();
                
    if(path.endsWith(".xml"))
                    prop.loadFromXML(inBuff);
                
    else
                    prop.load(inBuff);
                inBuff.close();
            }
    catch(Exception e){
                e.printStackTrace();
            }
            
    return prop;
        }
    }
        配置文件woxingwosu.xml
    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
    <properties> 
    <entry key="no">woxingwosu</entry> 
    <entry key="name">我行我素</entry> 
    </properties> 
        配置文件woxingwosu.properties(我用Unicode编码)
    no:woxingwosu
    name \u6211\u884c\u6211\u7d20

        除了读取参数,同时也可以修改参数,添加参数,或者生成一个文件,参考一下帮助文档,其实都很简单。
    =======================================================================================iaq
  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/kentyshang/p/836050.html
Copyright © 2011-2022 走看看