Properties类

Posted

tags:

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

1.继承关系

java.lang.Object

  继承者 java.util.Dictionary<K,V>

      继承者 java.util.Hashtable<Object,Object>

          继承者 java.util.Properties


2.特性

Properties

1.继承与Hashtable,所以是线程安全键值对存储结构

2.可保存在流中或从流中加载

3.不同于Hashtable,Hashtable可保存object对象的键值对,Properties只能保存字符串类型的键值对


3.常用方法:

setProperty(String key, String value) 调用 Hashtable 的方法 put。

getProperty(String key, String defaultValue) 用指定的键在属性列表中搜索属性。

list(PrintWriter out) 将属性列表输出到指定的输出流

load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。

store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符



4.实际使用

在src目录下,创建一个prop.properties文件,里面写上key=value的键值对数据,然后进行load加载,比如jdbc信息


代码1:设置和获取key-value

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Set;

public class Main_Properties {

	public static void main(String[] args) {
		
		Properties prop=new Properties();
		prop.setProperty("name", "张三");
		prop.setProperty("age" , "10");
		System.out.println(prop);
		/**
		 * 输出:
		 * {age=10, name=张三}
		 * */
		String name=prop.getProperty("name");
		String age =prop.getProperty("age");
		String id  =prop.getProperty("id");
		System.out.println("name : "+name+",age :"+age+",id : "+id);
		/**
		 * 输出
		 * name : 张三,age :10,id : null
		 * */
		
		PrintWriter pw=null;
		try {
			pw=new PrintWriter(new FileWriter("E:/0326.txt"),true);
			Set<Object> set=prop.keySet();
			for(Object obj:set) {
				String key   = (String) obj;
				String value = prop.getProperty(key);
				pw.println(key+":"+value);
				/**
				 * 文件中输出内容
				 * 1  age:10
				 * 2  name:张三
				 * 3     会多出一行空行,pw.println导致
				 * */
			}
		} catch (IOException e) {
			System.out.println("【异常】: IO错误");
		} finally {
			if(pw!=null) {
				pw.close();
			}
		}
		System.out.println("end");
	}
}


代码2:写入文件中

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Properties;

public class Main_Properties_List {

	public static void main(String[] args) {
		Properties prop=new Properties();
		prop.setProperty("name", "张三");
		prop.setProperty("age" , "10");
	
		PrintWriter pw=null;
		try {
			pw=new PrintWriter("E:/0326_2.txt");
			prop.list(pw);
			/**
			 * 文件写入内容,默认间隔符是等号
			 * 1    -- listing properties --
			 * 2    age=10
			 * 3    name=张三
			 * 4    <多出一行空行>
			 * */
		} catch (FileNotFoundException e) {
			System.out.println("【异常】:未找到文件");
		} finally {
			if(pw!=null) {
				pw.close();
			}
		}
		System.out.println("end");
	}

}


代码3:从文件中加载属性

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

public class Main_Properties_Load {

	public static void main(String[] args) {
		Properties prop=new Properties();
		FileReader fr  =null;
		
		try {
			fr  =new FileReader("E:/1.txt");
			/**
			 * 文件内容
			 * name=www
			 * age=30
			 * [email protected]大连      <这行使用的不是默认标准的分隔符>
			 * daxue:工大   <这行使用的不是默认标准的分隔符>
			 * */
			prop.load(fr);
			String name =prop.getProperty("name");
			String age  =prop.getProperty("age");
			String city =prop.getProperty("city");
			String daxue=prop.getProperty("daxue");
			System.out.println("name="+name+",age="+age+",city="+city+",daxue="+daxue);
			/**
			 * <输出内容>
			 * name=www,age=30,city=null,daxue=工大
			 * */
		} catch (FileNotFoundException e) {
			System.out.println("【异常】文件未找到");
		} catch (IOException e) {
			System.out.println("【异常】IO");
		} finally {
			if(fr!=null) {
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		

	}

}


代码4:带注释存储到文件中

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class Main_Properties_Store {

	public static void main(String[] args) {
		
		Properties prop=new Properties();
		prop.setProperty("name", "张三");
		prop.setProperty("age" , "10");
		
		FileWriter fw=null;
		try {
			fw=new FileWriter("E:/0326_3.txt");
			prop.store(fw, "这里是注释");
			/**
			 * 文件写入内容
			 * 1	#\u8FD9\u91CC\u662F\u6CE8\u91CA		这行是"这里是注释"
			 * 2	#Mon Mar 26 20:53:18 CST 2018		这行是自动生成的时间
			 * 3	age=10
			 * 4	name=张三
			 * 5	<多出一行空行>
			 * */
		} catch (IOException e) {
			System.out.println("【异常】IO");
		} finally {
			if(fw!=null) {
				try {
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("end");
	}

}


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

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

ResourceBundle类读取properties文件

顶点

elasticsearch代码片段,及工具类SearchEsUtil.java

使用ResourceBundle 类读取 src 下的 xxx.properties 文件

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段