• 使用Properties配置文件进行配置读取


    使用Properties配置文件进行配置读取:


    例如:有一个配置文件的内容如下:

    # setting.properties
    
    last_open_file=/data/hello.txt
    auto_save_interval=60
    

    可以从文件系统读取这个.properties文件:

    String f = "setting.properties";
    Properties props = new Properties();
    props.load(new java.io.FileInputStream(f));
    
    String filepath = props.getProperty("last_open_file");
    String interval = props.getProperty("auto_save_interval", "120");
    

    一般使用Properties读取配置文件,一共有三步:

    	* 创建Properties实例;	
    	* 调用load()读取文件;
    	* 调用getProperty()获取配置。
    

    也可以从classpath读取.properties文件,因为load(InputStream)方法接收一个InputStream实例,表示一个字节流,它不一定是文件流,也可以是从jar包中读取的资源流:

    Properties props = new Properties();
    props.load(getClass().getResourceAsStream("/common/setting.properties"));
    

    如果有多个.properties文件,可以反复调用load()读取,后读取的key-value会覆盖已读取的key-value:

    Properties props = new Properties();
    props.load(getClass().getResourceAsString("/common/setting.properties"));
    props.load(new FileInputStream("C:\conf\setting.properties"));
    

    上面的代码演示了Properties的一个常用用法:可以把默认配置文件放到classpath中,然后,根据机器的环境编写另一个配置文件,覆盖某些默认的配置。

    Properties设计的目的是存储String类型的key-value,但Properties实际上是从Hashtable派生的,它的设计实际上是有问题的,但是为了保持兼容性,现在已经没法修改了。除了getProperty()和setProperty()方法外,还有从Hashtable继承下来的get()和put()方法,这些方法的参数签名是Object,我们在使用Properties的时候,不要去调用这些从Hashtable继承下来的方法。


    写入配置文件:

    如果通过setProperty()修改了Properties实例,可以把配置写入文件,以便下次启动时获得最新配置。写入配置文件使用store()方法:

    Properties props = new Properties();
    props.setProperty("url", "http://www.liaoxuefeng.com");
    props.setProperty("language", "Java");
    props.store(new FileOutputStream("C:\conf\setting.properties"), "这是写入的properties注释");
    

    由于load(InputStream)默认总是以ASCII编码读取字节流,所以会导致读到乱码。我们需要用另一个重载方法load(Reader)读取:

    Properties props = new Properties();
    props.load(new FileReader("settings.properties", StandardCharsets.UTF_8));
    

    就可以正常读取中文。InputStream和Reader的区别是一个是字节流,一个是字符流。字符流在内存中已经以char类型表示了,不涉及编码问题。

    博客网站 https://yamon.top 个人网站 https://yamon.top/resume GitHub网站 https://github.com/yamonc 欢迎前来访问
  • 相关阅读:
    冬季小学期 NIIT公司 web前端培训 javascript
    冬季小学期 NIIT公司 web前端培训 CSS
    冬季小学期 NIIT公司 web前端培训 HTML
    操作系统 思维导图 百度脑图
    验证码识别系统以及人工智能总结 神经网络encog图像识别入门
    eclipse 常用操作 持续更新
    大话设计模式笔记 访客模式
    [百度杯-二月场](Misc-Web)爆破-2
    [百度杯-二月场](Misc-Web)爆破-1
    jdk1.7中的常量池
  • 原文地址:https://www.cnblogs.com/chenyameng/p/11441405.html
Copyright © 2020-2023  润新知