2.1 配置文件简介
配置文件是一个灵活系统不可缺少的一部分,虽然配置文件非常重要,但却没有标准。
本节我们来了解 Windows 操作系统和 Java 环境中的配置文件。
2.1.1 Windows 操作系统的配置文件
Windows 系统广泛使用一种特殊化的 ASCII 文件(以“ini”为文件扩展名)作为它的
主要配置文件标准。下面是 INI 文件的片段:
; 最后修改时间:2012.10.12
[owner]
name=John Doe
organization=Acme Widgets Inc.
[database]
server=192.0.2.62 ; 使用 IP 地址,在域名解析不能使用时还能正常工作
port=143
file="payroll.dat"
[ftp]
该文件也称为初始化文件(Initialization File,它的扩展名就是 initialization 的前三个字
母)或概要文件(profile),应用程序可以拥有自己的配置文件,存储应用的设置信息,也可
以访问 Windows 的基本系统配置文件 win.ini 中存储的配置信息。INI 文件将配置信息分为
“节”,节标题放在方括号中。如上面例子中的 [database],就是 database 节的节标题。节用
于对配置数据做一个归类,每一个节可以包含一些与之相关的“项”(ENTRY),并通过等号
对其进行赋值(VALUE)。一般的形式如下:
[SECTION]
ENTRY=VALUE
其中 VALUE 值可以有两种类型:数型或字符串。上面给出的 INI 文件片段中,database
节中包含 3 个项,分别是 server、port 和 file。其中,配置项 port 可以以数型的形式读取。
INI 文件中的注释以分号开始,到行尾结束。
Windows 操作系统同时还提供了一些 API,用来对配置文件进行读、写。如使用
GetProfileString() 函数可以从配置文件 win.ini 中获取字符串型配置,使用 GetPrivateProfileInt()
函数可以从私有的配置文件中读取一个配置整数型项。该函数的原型如下:
UINT WINAPI GetPrivateProfileInt(
__in LPCTSTR lpAppName,
__in LPCTSTR lpKeyName,
__in INT nDefault,
__in LPCTSTR lpFileName
);
其 中, 参 数 LPCTSTR lpFileName 是 INI 文 件 的 文 件 名,LPCTSTR lpAppName 和
LPCTSTR lpKeyName 分别是上述的“节”和“项”,INT nDefault 是默认值,也就是说,如
果在配置文件中找不到配置信息,就返回该默认值。
2.1.2 Java 配置文件
JDK 提供了 java.util.Properties 类,用于处理简单的配置
文件。Properties 很早就被引入到 Java 的类库中,并且一直没
有什么变化。它继承自 Hashtable,如图 2-1 所示,表示了一
个持久的属性集,该集可保存在流中或从流中加载。属性列
表中每个键及其对应值都是字符串类型。
图 2-1 Properties 的继承关系
相对于 INI 文件,Properties 处理的配置文件格式非常简单,它只支持键 – 值对,等号
“=”左边为键,右边为值。形式如下:
ENTRY=VALUE
由于 Properties 基于 Hashtable,它并不能支持 INI 文件中的“节”,对配置项进行分类。
java.util.Properties 中用于处理属性列表的主要方法如下,其中,getProperty() 用于在属性
列表中获取指定键(参数 key)对应的属性,它有两个形式,一个不提供默认值,另一个可以
提供默认值。Properties.setProperty() 用于在属性列表中设置 / 更新属性值。相关代码如下:
// 用指定的键在此属性列表中搜索属性
public String getProperty(String key)
// 功能同上,参数 defaultValue 提供了默认值
public String getProperty(String key, String defaultValue)
// 最终调用 Hashtable 的方法 put
public synchronized Object setProperty(String key, String value)
Properties 中的属性通过 load() 方法加载,该方法从输入流中读取键 – 值对,而 store()
方法则将 Properties 表中的属性列表写入输出流。使用输入流和输出流,Properties 对象
不但可以保存在文件中,而且还可以保存在其他支持流的系统中,如 Web 服务器。J2SE
1.5 版本以后,Properties 中的数据也可以以 XML 格式保存,对应的加载和写出方法是loadFromXML() 和 storeToXML()。
下面是以 XML 格式存在的 Properties 配置文件的例子。
<?xml?version="1.0"?encoding="UTF-8"?>
<!DOCTYPE?properties?SYSTEM
"http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Hi</comment>
<entry?key="foo">bar</entry>
<entry?key="fu">baz</entry>
</properties>
由于 java.util.Properties 提供的能力有限,Java 社区中出现了大量的配置信息读 / 写方
案,其中比较有名的是 Apache Jakarta Commons 工具集中提供的 Commons Configuration。
Commons Configuration 中的 PropertiesConfiguration 类提供了丰富的访问配置参数的方法。
Commons Configuration 支持文本、XML 配置文件格式 ;支持加载多个配置文件 ;支持分
层或多级的配置 ;同时提供对单值或多值配置参数的基于类型的访问。应该说,Commons
Configuration 是一个功能强大的配置文件处理工具。
这是给大家做的一个《Hadoop技术内幕:深入解析Hadoop和HDFS》的分享,这本书是由我们的蔡斌和陈湘萍著作,大家想学Hadoop的可以在网上找这本书。
后续还会给大家上,敬请期待。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。 Hadoop也是后面其他技术的基础,学好了Hadoop才能更好地学好hive,hbase,spark,storm等。
作者:爱我的程序人生
链接:https://www.jianshu.com/p/d985a859aadb