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(代码片段