java.util.Properties和 .properties 文件

.properties文件

在 java 程序中,.properties 文件通常作为配置文件存储一些简短又可能很容易改变的信息,比如数据库连接信息等。

这种文件内部是采用键值对的形式存储信息的,通常用空格,=或者:来作为分隔符。将一些关键信息存储在 .properties 文件中,相比存在数据库更安全,内部做了更多的限制呗,移植性更高,读取数据效率更高。还可以用来解决国际化问题!

java.util.Properties类

这是 JDK 中提供了一个专门用来操作 .properties 文件的类,自然要设计成键值对的形式,这样可以和 .properties 文件直接映射,避免了无意义的转换,效率更高。所以,Properties 类继承了 java.util.HashTable 类,具有 Map 集合的属性特征,把它当成一个数据结构为键值对的集合看待就可以了,只是它针对 .properties 文件做了一些个性化的功能扩展。

特别要讲到的一点是 java.lang.System 类有一个public Properties getProperties()方法,它将系统的一些属性以键值对的形式封装到 Properties 对象中去,再将这个对象的引用作为返回值返回。

java.util.Properties 类还有一个public Enumeration propertyNames()方法,返回一个 Enumeration 对象,用来迭代集合内部的 key 值。这个方法内部是创建了一个 HashTable 对象,来存储 Properties 的键值对,再调用 HashTable 对象的 keys() 方法返回 Enumeration 对象。源码如下:

public Enumeration<?> propertyNames() {
        Hashtable<String,Object> h = new Hashtable<>();
        enumerate(h);
        return h.keys();
}

这个 Enumeration 对象本质是类似于 Iterator 的一个迭代器,是集合对象的一个具有遍历功能的内部类对象。Iterator 是线程不安全的,Enumeration 是线程安全的,线程安全说明做了更多的限制,必然也就导致效率低一点。 Enumeration 类提供了public boolean hasMoreElements()方法来确定集合内部是否还有元素,以及E nextElement()方法来获得具体元素的值。迭代器 Iterator 不也是这样的吗?所以说这也是一个迭代器,并不是什么持有对象引用的集合类。

迭代器是如何实现的呢?拿 ArrayList 举例,它有一个私有内部类实现了 Iterator 接口,然后提供一个公有的方法获得 Iterator 对象。这个 Iterator 对象在内存中依赖这个外部 ArrayList 集合对象而存在,内部类对象可以操作到外部类对象的属性,好像一个游标,由此完成迭代器的功能。一两个月前才自己动手实现过的啊,没有做记录,都有点遗忘了,可见记笔记的重要性。学习不做笔记,不做记录等于白读书,白白浪费了时间,毕竟人脑是用来思考的,并不擅长记忆。

java.util.Properties 类还有一个public void list(PrintStream out)方法可以直接输出到控制台上,参数设置为 System.out 就可以了。

如何读取和写入 .properties 文件?

java.util.Properties 类就是专门设计来对 .properties 文件进行操作的,读取和写入文件是重点内容,当然离不开 IO 流。

读取文件,java.util.Properties 类提供了一个public void load(InputStream inStream) throws IOException方法,来从指定输入流管道中读取指定文件的内容,并将读到的内容封装到该对象中去。它内部实现就是各种繁杂的 IO 流操作呗!

写入文件,java.util.Properties 类提供了一个public void store(OutputStream out,String comments) throws IOException方法,来将 Properties 对象的内容通过输出流写入到指定的文件中去,其中第二个属性 comments 是对此 .properties 文件的一个字符串描述信息,在文件中是以 # 标识的注释形式存在的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容