java-属性集properties

Posted 小丑quan

tags:

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

简介

    /*
    使用properties集合存储数据,遍历取出properties集合中的数据
    properties集合有一些操作字符串的特有方法
        Object setProperty(String key, String value) 致电 Hashtable方法 put 。
        String getProperty(String key) 使用此属性列表中指定的键搜索属性。相当于map的get
        Set<String> stringPropertyNames() 返回此属性列表中的一组键,其中键及其对应的值为字符串,
        包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。 相当于map集合中的keySet方法
    */
    private static void show1(){
        //
        Properties prop = new Properties();
        //使用setProperties
        prop.setProperty("qq2","22");
        prop.setProperty("qq4","44");
        prop.setProperty("qq5","55");
        //遍历,stringPropertiesNames 取出键,存储到Set集合
        Set<String> set = prop.stringPropertyNames();

        //遍历Set集合,key
        for (String key: set) {
            //
            String value = prop.getProperty(key);
            System.out.println(key+"::"+ value);
        }
        /*
        qq5::55
        qq4::44
        qq2::22
         */
    }
}

 

 

持久化

    /*
    可以使用properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中
    void store(OutputStream out, String comments) 将此属性列表(键和元素对)写入此 Properties表中,
        以适合于使用 load(InputStream)方法加载到 Properties表中的格式输出流。
    void store(Writer writer, String comments) 将此属性列表(键和元素对)写入此 Properties表中,
        以适合使用 load(Reader)方法的格式输出到输出字符流。
    参数:
        OutputStream out 字节输出流,不能写入中文
        writer writer 字符输出流,可以写中文
        String comments :注释,解析说明文件是做什么用的;
                        不能使用中文,会产生乱码,默认是unicode编码
        使用步骤:
     */

 

    public static void show2() throws IOException {
        Properties prop = new Properties();
        //使用setProperties
        prop.setProperty("qq2","22");
        prop.setProperty("qq4","44");
        prop.setProperty("qq5","55");

        FileWriter fw = new FileWriter("C:\\\\Users\\\\quan\\\\Desktop\\\\练习\\\\src\\\\code\\\\haotusay");

        prop.store(fw,"save");
        fw.close();
    }
/*
#save
#Thu Jun 18 23:04:20 CST 2020//自动加
qq5=55
qq4=44
qq2=22

 */

 

 

普通操作“:

 /*
    使用properties集合存储数据,遍历取出properties集合中的数据
    properties集合有一些操作字符串的特有方法
        Object setProperty(String key, String value) 致电 Hashtable方法 put 。
        String getProperty(String key) 使用此属性列表中指定的键搜索属性。相当于map的get
        Set<String> stringPropertyNames() 返回此属性列表中的一组键,其中键及其对应的值为字符串,
        包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。 相当于map集合中的keySet方法
    */
  private static void show1(){
        //
        Properties prop = new Properties();
        //使用setProperties
        prop.setProperty("qq2","22");
        prop.setProperty("qq4","44");
        prop.setProperty("qq5","55");
        //遍历,stringPropertiesNames 取出键,存储到Set集合
        Set<String> set = prop.stringPropertyNames();

        //遍历Set集合,key
        for (String key: set) {
            //
            String value = prop.getProperty(key);
            System.out.println(key+"::"+ value);
        }
        /*
        qq5::55
        qq4::44
        qq2::22
         */
    }
}

 

load

 

 

 

public class Demo5 {
    public static void main(String[] args) throws IOException {
        Properties prop = new Properties();
        prop.load(new FileReader("C:\\\\Users\\\\quan\\\\Desktop\\\\练习\\\\src\\\\code\\\\haotusay"));
        Set<String> set =  prop.stringPropertyNames();
        for (String key:set
             ) {
            String value = prop.getProperty(key);
            System.out.println(key+"::"+value);
        }
        /*
        qq5::55
        qq4::44
        qq2::22
         */
    }
}

 

加载配置文件

 

Source Root是源码的根目录,默认为src

Resource Root是资源文件的根目录,常用来放置配置文件,也可以放置其他资源文件

第一种方式

直接从文件种加载数据

目录结构:

 

 

public class Atest {
    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();
        FileInputStream fis = new FileInputStream("resources\\\\quan.properties");
        //使用这个路径是不行的
        properties.load(fis);
        String name = properties.getProperty("name");
        String  age = properties.getProperty("age");
        System.out.println(name+age);
    }
}
//re:quan12

 

 

 

问题:

这种加载资源的方式是从原项目中加载资源的,不是从部署的项目(输出目录)中加载资源的,你把部署好的项目拷给运维,运行报错:找不到这个资源文件。

 

不把resource文件夹标识为资源根目录,效果也是对的。因为是从原项目中加载的资源文件。

标识为Resource Root后,运行|调试时才会把这个目录复制到输出目录(部署目录)。

 

 

一般通过反射来加载配置文件

 

注意:

只有标识为Resource Root的文件夹run|debug时才会拷贝到输出目录|目录,拷贝时不拷贝资源根目录resource,
直接把resource下的子文件、子文件夹拷贝到输出目录中项目的根目录下,所以路径以/开头,/表示项目的根目录。

 

public class Atest {
    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();


        InputStream is = Atest.class.getClassLoader().getResourceAsStream("quan.properties");
//        InputStream is = Atest.class.getResourceAsStream("/quan.properties");不使用类加载器也是可以的,加载根目录
        properties.load(is);
        String name = properties.getProperty("name");
        String  age = properties.getProperty("age");
        System.out.println(name+age);
    }
}

关于用不用类加载器可以看看这篇:https://www.cnblogs.com/java-quan/p/13189202.html

 

以上是关于java-属性集properties的主要内容,如果未能解决你的问题,请参考以下文章

属性集

Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property(代码片段

Java 中与IO流有关的集合(Properties集合)

java-properties配置文件

Java Properties 类

Java Properties 类