Manifest文件也有关键字
以前在写JAVA程序的时候一直以为MANIFEST.MF文件就是很简单的键值对的型式,就好像是个MAP一样,程序需要什么属性就从里面读就可以了。
但是今天在写一段读取MANIFEST.MF文件的程序的时候发现该文件结构还不只是一个简单的MAP。
MANIFEST.MF文件大体可以分为两大部分:第一部分Main Attributes;第二部分是Entries。
Main Attributes就是我们一开始所想像的那种简单的MAP。如果写成 key: value 的型式,那么键就是key值就是value。
第二部分叫Entries的东西可以看成是许多个小的MAP。每一个Entry都是一个MAP,里面都有许多个key和value。对Entry的唯一索引是一个叫做"Name"的属性(不区分大小写)。也就是说"Name"属性是MANIFEST的关键字,你不可能在MANIFEST中设置一个叫Name的属性然后从程序中提取出来,如果你这样做的话JDK将返回null。
举个例子:
aaa: value-aaa
bbb: value-bbb
name: attr-1
aa1: value-aa1
aa2: value-aa2
name: attr-2
bb1: value-bb1
bb2: value-bb2
以上这个MANIFEST.MF文件包含了两个Main Attributes:aaa和bbb。同时包含了两个Entry:attr-1和attr-2。attr-1这个Entry中包含了aa1和aa2两个属性。attr-2这个Entry中包含了bb1和bb2两个属性。
如何通过JAVA程序读取MANIFEST.MF文件?
- 首先初始化Manifest对象,传入参数是一个InputStream。
Manifest manifest = new Manifest(new FileInputStream("./TestManifest.txt")); - 获得Main Attributes属性和值
Attributes mainAttributes = manifest.getMainAttributes();
String mainAttributeValue = mainAttributes.getValue("aaa"); - 获得某一个Entry并获得其中的属性和值
Attributes attributes = manifest.getAttributes("attr-1");
String attributeValue = attributes.getValue("aa1"); - 获得所有Entries
Map entries = manifest.getEntries();
Attributes attributes = (Attributes) entries.get(attributesName);
- 属性名和值之间除了冒号意外一定要有空格。
- 不要有重复的属性名,除了"name"
- 不能有属性名叫做"name"
- 最后一个属性完后一定要有一行空行,否则最后一个属性将取不到

0 comments:
Post a Comment