MANIFEST.MF文件结构

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文件?

  1. 首先初始化Manifest对象,传入参数是一个InputStream。
      Manifest manifest = new Manifest(new FileInputStream("./TestManifest.txt"));
  2. 获得Main Attributes属性和值
      Attributes mainAttributes = manifest.getMainAttributes();
      String mainAttributeValue = mainAttributes.getValue("aaa");
  3. 获得某一个Entry并获得其中的属性和值
      Attributes attributes = manifest.getAttributes("attr-1");
      String attributeValue = attributes.getValue("aa1");
  4. 获得所有Entries
      Map entries = manifest.getEntries();
      Attributes attributes = (Attributes) entries.get(attributesName);
写MANIFEST.MF文件需要注意的几点:
  1. 属性名和值之间除了冒号意外一定要有空格。
  2. 不要有重复的属性名,除了"name"
  3. 不能有属性名叫做"name"
  4. 最后一个属性完后一定要有一行空行,否则最后一个属性将取不到

0 comments: