学习目标:

1、认识properties文件,理解其含义,会正确创建properties文件。

2、会使用java.util.Properties类来操作properties文件。

一、认识properties文件

1、properties文件是一个文本文件

2、properties文件的语法有两种,一种是注释,一种属性配置。

注    释:前面加上#号

属性配置:以“键=值”的方式书写一个属性的配置信息。

3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。

4、properties的属性配置键值前后的空格在解析时候会被忽略。

5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。

例如,下面一个properties文件:

二、解读java.util.Properties类

在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件)。Properties类是Hashtable的子类。也就是说它具备Map集合的特点。Properties的构造函数有两个,一个不带参数,一个使用一个Properties对象作为参数。

1、Properties类的层次结构

java.lang.Object

java.util.Dictionary<K,V>

java.util.Hashtable<Object,Object>

java.util.Properties

从层次机构看,Properties类实现了Map接口,因为HashTable实现了Map接口,因此Properties类本质上是一种简单的Map容器。

实际上,Properties类本身表示了对一种Map结构的操作。properties文件本身就表示了一个“键值对”的集合。因此,Properties类属于集合容器的家族,在使用前应该创建一个Properties的容器,实际上就是创建一个默认不带参数的Properties对象。以后通过别的方式给里面添加“键值对”。

2、properties文件与Properties类的关系

通过properties文件可以填充Properties类。

也可以通过xml文件来填充Properties类。

可以通过绝对路径方式加载Properties文件信息,也可以使用相对路径加载。

三、实践

1、以绝对方式加载properties文件信息。

2、将Properties对象持久化到一个properties文件或者一个xml文件中。

3、修改并持久化properties文件。

测试的properties文件:

测试类:

  1 /**
2 * Properties类测试
3 * User: 支胜勇
4 */
5 public class Test4 {
6
7 public static void main(String args[]) throws IOException {
8
9 System.out.println("------------测试Properties-------------");
10
11 Properties prop=new Properties();
12 prop.put("姓名", "支胜勇");
13 prop.put("爱好", "编程和旅游");
14 prop.put("籍贯", "贵州毕节");
15
16 createProperFile("E:\\tt.properties",prop);
17
18 readProperFile("E:\\tt.properties");
19
20 Map<String,String> map=new HashMap<String,String>();
21 map.put("性别", "男");
22 map.put("学历", "本科");
23 modifyProperFile("E:\\tt.properties",map);
24 }
25
26
27 /***
28 * 创建properties文件,并向其写入键值对,包括properties和xml格式
29 * @param fileName
30 * @param keyValues
31 */
32 public static void createProperFile(String fileName,Properties prop){
33 System.out.println("------------创建Properties文件----------");
34 //创建properties文件
35
36 File properFile=new File(fileName.substring(0,fileName.lastIndexOf("."))+".properties");
37 if(!properFile.exists()){
38 try {
39 properFile.createNewFile();
40 } catch (IOException e) {
41 // TODO Auto-generated catch block
42 System.err.print("创建文件失败!");
43 return;
44 }
45 }
46
47 try {
48
49 FileWriter fw=new FileWriter(properFile);
50 prop.store(fw, "我是通过properties写进来的");
51 OutputStream fw1=new FileOutputStream(fileName.substring(0,fileName.lastIndexOf("."))+".xml");
52 prop.storeToXML(fw1, "我是通过properties写进来的");
53 fw1.close();
54 fw.close();
55
56 System.out.println("------------创建Properties文件成功----------");
57 } catch (IOException e) {
58 // TODO Auto-generated catch block
59 System.err.print("向properties文件写入数据失败!");
60 return;
61 }
62 }
63
64
65 /***
66 * 读取properties文件
67 * @param properFileName
68 * @return
69 * @throws IOException
70 */
71 public static Properties readProperFile(String properFileName) throws IOException{
72
73 File file =new File(properFileName);
74 Properties prop=null;
75 if(!file.exists()){
76
77 System.out.print("文件不存在!");
78 return null;
79 }
80
81 try {
82 System.out.println("------读取properties文件-------");
83 FileReader fr=new FileReader(file);
84 //创建一个Properties容器
85 prop = new Properties();
86 //从流中加载properties文件信息
87 prop.load(fr);
88 //循环输出配置信息
89 for (Object key : prop.keySet()) {
90 System.out.println(key + "=" + prop.get(key));
91 }
92
93
94 } catch (FileNotFoundException e) {
95 // TODO Auto-generated catch block
96 System.out.print("文件不存在!");
97 }
98
99 return prop;
100 }
101
102
103
104 /***
105 * 修改properties文件,并持久化保存
106 * @param properFileName
107 * @param map
108 * @throws IOException
109 */
110 Public static void modifyProperFile(String properFileName,Map<String,String> map) throws IOException{
111
112 Properties prop=new Properties();
113
114 if(properFileName.endsWith(".xml")||properFileName.endsWith(".XML")){
115
116 prop.loadFromXML(new FileInputStream(properFileName));
117 for(String key:map.keySet()){
118 prop.put(key, map.get(key));
119 }
120 OutputStream os=new FileOutputStream(properFileName);
121 prop.storeToXML(os, "我已经被修了");
122 os.close();
123 }else{
124 prop.load(new FileReader(properFileName));
125 for(String key:map.keySet()){
126 prop.put(key, map.get(key));
127 }
128 FileWriter fw=new FileWriter(properFileName);
129 prop.store(fw, "我已经被修改了");
130 fw.close();
131 }
132 }
133 }

运行结果图:

Java中Properties类的学习总结的更多相关文章

  1. Java中Properties类

    1 简介: JDK提供的java.util.Properties类继承自Hashtable类并且实现了Map接口,用map来存储key-value数据,所以存入的数据是无序的.其中键和值都是字符串类型 ...

  2. java中大数类的学习

    java中提供了大数类BigInteger和BigDecimal分别表示大整数类和大浮点数类,这两个类都在java.math.*包中,因此每次必须在开头处引用该包. 一.BigInteger构造函数: ...

  3. java中Properties类及读取properties中属性值

    本文为博主原创,未经允许不得转载: 在项目的应用中,经常将一些配置放入properties文件中,在代码应用中读取properties文件,就需要专门的类Properties类,通过这个类可以进行读取 ...

  4. Java中Properties类知识的总结

    一.Properties类与配置文件 注意:是一个Map集合,该集合中的键值对都是字符串.该集合通常用于对键值对形式的配置文件进行操作. 配置文件:将软件中可变的部分数据可以定义到一个文件中,方便以后 ...

  5. Java中Properties类的操作

    知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加 ...

  6. Java中Properties类的操作配置文件

    知识学而不用,就等于没用,到真正用到的时 候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用 Java来写, ...

  7. 对Java中properties类的理解

    转载于:https://www.cnblogs.com/bakari/p/3562244.html 一.Java Properties类 Java中有个比较重要的类Properties(Java.ut ...

  8. Java 中 Properties 类的操作

    一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...

  9. Java中Properties类的使用

    1.properties介绍 java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值&quo ...

随机推荐

  1. C++学习笔记之友元

    一.引言 C++控制对类对象私有部分(private)的访问,通常只能通过公有的(public)类方法去访问.但是有时候这种限制太严格,不适合特定的问题,于是C++提供了另外一种形式的访问权限:友元. ...

  2. 【转】android开源项目和框架

      特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github ...

  3. 黑客破译android开发代码真就那么简单?

    很多程序员辛辛苦苦开发出的android开发代码,很容易就被黑客翻译了. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了 ...

  4. 关于Android圆形图片的一种优化方案(可以显示网络图片)

    在Android App中,我们经常看到圆形头像图片,然后网上也有很多开源的控件.刚好这个项目用到了,也去找了一些开源的,发现并不完美,所以只好自己优化了,废话不多说,先上效果图: 下面是源码:本人能 ...

  5. iOS开发——多线程OC篇&(十一)多线程NSOperation高级用法

    自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewC ...

  6. 死锁相关 变量 与 PURGE 线程停止

    http://www.tuicool.com/articles/NzAFZn https://github.com/percona/percona-server/pull/83/commits/091 ...

  7. 一款基于jQuery/CSS3实现拼图效果的相册

    之前为大家介绍了 HTML5 3D立体图片相册, HTML5图片相册重力感应特效, 基于CSS3图片可倾斜摆放的动画相册 今天我们要来分享一款很酷的jQuery相册插件,首先相册中的图片会以一定的角度 ...

  8. Linux下安装FTP

    1.查询进程是否有ftp服务 ps -ef|grep vsftpd 查询是否安装vsftpd: rpm -qa |grep vsftpd (rpm的安装:apt-get install rpm) 2. ...

  9. 文件共享windows server 2008 服务器

    1.远程连接到windows server2008 E盘右键共享 2.不能创建文件夹 右键E盘→共享→高级共享→权限→全部打勾即可. 3.ok,文件服务器

  10. FMDB 二次封装工具类,让你快速学会封装,集成数据库

    来源:StrivEver 链接:http://www.jianshu.com/p/4c77aee0b41c 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线 ...