【基础提升】Properties知多少~

本文介绍了Java Properties类的基本概念、特点及常用方法,包括如何存储和读取属性文件。Properties作为Hashtable子类,用于存储配置信息,支持与流操作结合,便于文件的读写。文章通过示例代码展示了如何将键值对存储到文件以及从文件加载数据到Properties集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常我们在项目开发过程当中都是会遇见一个场景,那就是要将一些配置信息写到一个文件当中去,而这个文件的后缀注明就是“.properties”,我们一开始在学习的时候,就有人告诉我们,这个文件应该命名成"XXX.properties"的形式。中文翻译,就是属性,特性的意思。

那么它到底是干什么的,今天就来总结总结下,看看具体的再更加深入了解下。

一、Properties的概述

properties 类表示了一个持久的属性集。

Properties 可保存在流中或从流中加载。

属性列表中每个键及其对应值都是一个字符串。

特点:

1、hashtable的子类,也即Map接口的子类,map中的方法都可以用。

2、该集合没有泛型。键值都是字符串。

3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。

4、有和流技术相结合的方法。

二、常用的方法

  • public Object setProperty(String key, String value)调用 Map 的方法 put。
  • public Set<String> stringPropertyNames()返回此属性列表中的键集,
  • public String getProperty(String key)用指定的键在此属性列表中搜索属性

三、示例代码

案例代码1:利用Properties存储键值对

public class PropsDemo_01 {
	@Test
	public void demo01(){
		
		//Properties对象 特殊Map<String,String>
		
		//1 创建对象
		Properties props = new Properties();
		
		//2 设置数据
		//props.put(key, value)
		props.setProperty("k01", "v01");
		props.setProperty("k02", "v02");
		props.setProperty("k03", "v03");
		
		//3 获得指定名称的数据
		String prop = props.getProperty("k02");
		System.out.println(prop);
		
		//4获得所有名称,并遍历获得所有的数据
		System.out.println("--------------");
		Set<String> names = props.stringPropertyNames();
		for(String name : names){
			String value = props.getProperty(name);
			System.out.println(name + " : " + value);
		}
	}
}
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/*
 * Properties:表示了一个持久的属性集,属性列表中每个键及其对应值都是一个字符串
 * 
 * 构造方法:
 * 		Properties() 
 */
public class PropertiesDemo2 {
	public static void main(String[] args) {
		//创建属性列表对象
		Properties prop = new Properties();
		//添加映射关系
		prop.put("CZBK001", "zhangsan");
		prop.put("CZBK002", "lisi");
		prop.put("CZBK003", "wangwu");
		
		//遍历属性列表
		//获取所有的key,通过key获取value
		Set<Object> keys = prop.keySet();
		for (Object key : keys) {
			Object value = prop.get(key);
			System.out.println(key + "=" + value);
		}
		System.out.println("------------------");
		
                //获取所有的键值对对象
		Set<Map.Entry<Object,Object>> entrys = prop.entrySet();
		for (Map.Entry<Object, Object> entry : entrys) {
			Object key = entry.getKey();
			Object value = entry.getValue();
			System.out.println(key + "=" + value);
		}
	
	}
}

 

四、Properties的加载文件与写入文件以及和流的结合

4.1 将集合中内容存储到文件

  1. store(OutputStream,comments)
  2. stroe(Writer,comments);

其中把集合中的数据,保存到指定的流所对应的文件中,参数comments代表对其的描述信息

示例代码:

        @Test
	public void demo01() throws Exception{
		
		//将内容写入到文件
		// * Properties 对应一种特殊文件:*.properties
		// * 一行表示一个键值对,格式:k=v
		
		//1 创建对象
		Properties props = new Properties();
		
		//2 设置数据
		//props.put(key, value)
		props.setProperty("k01", "v01");
		props.setProperty("k02", "v02");
		props.setProperty("k03", "v03");
		
		//3 将props写入到硬盘
		Writer writer = new OutputStreamWriter(new FileOutputStream("1.properties"),"UTF-8");
		props.store(writer, "描述");
		writer.close();
		
	}

 4.2 读取文件中的数据,并保存到集合

  • load(InputStream)  
  • load(Reader)  

其中的load方法就是把指定流所对应的文件中的数据,读取出来,保存到Properties集合中

示例代码:

        @Test
	public void demo02() throws Exception{
		//从properties文件中获得数据
		
		//1 获得资源流
		Reader reader = new InputStreamReader(new FileInputStream("1.properties"),"UTF-8");
		
		//2 通过Properties对象加载流
		Properties props = new Properties();
		props.load(reader);
		
		//3 遍历所有
		for(String name : props.stringPropertyNames()){
			String value = props.getProperty(name);
			System.out.println(name + " @ " +  value);
		}	
	}

4.3 Properties与流结合使用

(添加时间2018-11-29 ,这部分内容是在流的相关学习记录上传之后添加的,如果这还没有看的,建议先看我的其他几篇关于流的学习,更好哦!)

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

/*
 * Properties和IO流结合的功能: 
			void load(Reader reader) 
			
			void list(PrintWriter out)
			void store(Writer writer, String comments) 
 		
 *
 */
public class PropertiesDemo2 {
	public static void main(String[] args) throws IOException{
		//method();
		
		//method2();
		
		//创建属性列表对象
		Properties prop = new Properties();
		//添加映射关系
		prop.setProperty("CZBK001", "zhangsan");
		prop.setProperty("CZBK002", "lisi");
		prop.setProperty("CZBK003", "wangwu");
		//创建输出流对象
		FileWriter fw = new FileWriter("e.txt");
		
		//void store(Writer writer, String comments) 
		prop.store(fw, "hello world");
		
		//释放资源
		fw.close();
		
	
	}

	private static void method2() throws FileNotFoundException, IOException {
		//创建属性列表对象
		Properties prop = new Properties();
		//创建一个输入流对象
		FileReader fr = new FileReader("d.txt");
		
		//void load(Reader reader) 
		prop.load(fr);
		
		//释放资源
		fr.close();
		
		System.out.println(prop);
	}

	private static void method() throws FileNotFoundException {
		//创建属性列表对象
		Properties prop = new Properties();
		//添加映射关系
		prop.setProperty("CZBK001", "zhangsan");
		prop.setProperty("CZBK002", "lisi");
		prop.setProperty("CZBK003", "wangwu");
		
		//创建打印流对象
		PrintWriter out = new PrintWriter("d.txt");
		//void list(PrintWriter out)  
		prop.list(out);
		
		//释放资源
		out.close();
	}
}

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值