5.8 Properties

Posted huang-changfan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.8 Properties相关的知识,希望对你有一定的参考价值。

一、Propertie

主要用于读写资源配置文件。

Properties继承自Hashtable。

我们来看下HashMap和Hashtable的区别:

  Hashtabl  线程安全,    同步,   效率较低。

  HashMap 线程不安全,不同步,效率高。

 

  Hashtable key和value都不能为空

  HashMap 允许一个key为null,允许多个value为null。

 

Properties中每个key及value都只能是字符串,由于其继承自Hashtable所以都不能为空。

为空会抛出NullPointException。

 

二、常用方法

getProperty(String key)

根据key返回对应的value。


getProperty(String key, String defaultValue)
根据key返回对应的value,如果,不存在则返回defaultValue。

defaultValue自己指定,作为key为空时的备用选项。

 

setProperty(String key, String value)

设置Properties的key和value

 

我们先来用下这几个方法,和之前使用Map差不多

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]){
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");//添加元素
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        Set<Map.Entry<Object, Object>> mS= pro.entrySet();//使用迭代器输出所有元素
        Iterator<Map.Entry<Object,Object>> ite = mS.iterator();
        while(ite.hasNext()){
            Entry<Object,Object> en = ite.next();
            System.out.println("key:" +en.getKey() + "-->"+"value:" +en.getValue());
        }
    }
}
运行结果:
key:PASS-->value:xxxxxx
key:URL-->value:jdbc:mysql://localhost:3306/jdbc
key:USER-->value:root
key:DIVER-->value:com.mysql.cj.jdbc.Driver

 

此时pro对象中就有这些配置信息,接下来那我们将这些配置信息生成配置文件。

 

生成*.properties文件

store(OutputStream out,String comments);

生成*.xml文件

storeToXml(OutputStream out,String comments);

 

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]) throws FileNotFoundException, IOException{
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        pro.store(new FileOutputStream("E:/sqlProperties.properties"), "sql");//E盘下生成properties格式的文件
        pro.storeToXML(new FileOutputStream("E:/sqlXml.xml"), "sql");//E盘下生成xml格式文件
    }
}

运行后我们会发现E盘下多了两个文件:

技术分享图片 

 

我们用记事本打开这两个文件:

技术分享图片

技术分享图片

我们之前的配置信息就生成了对应的配置文件。 

 

上面使用的是绝对路径,我们一般使用相对路径,默认在当前工程下。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]) throws FileNotFoundException, IOException{
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        pro.store(new FileOutputStream("sqlProperties.properties"), "sql");
        pro.storeToXML(new FileOutputStream("src/sqlXml.xml"), "sql");
    }
}

 

 

技术分享图片

可以看到

"sqlProperties.properties"是直接保存到当前项目下,

"src/sqlXml.xml"是保存在当前工程下的src文件夹下。

没有使用绝对路径的话,前端默认加上当前工程路径。

这就是相对这个工程而言的相对路径。

以上是关于5.8 Properties的主要内容,如果未能解决你的问题,请参考以下文章

代码片段

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

顶点

unity shader学习笔记 shader基础结构以及Properties面板

我可以确保在 5.10+ 上编写的 Perl 代码可以在 5.8 上运行吗?

spring 国际化 js怎么设置