Каков правильный способ анализа записей файла manifest.mf в банке?

Файл manifest.mf, содержащийся во многих баночках Java, содержит заголовки, которые очень похожи на заголовки электронной почты. См. Пример [*]

Я хочу что-то, что может проанализировать этот формат в парах значений ключа:

Map<String, String> manifest = <mystery-parse-function>(new File("manifest.mf"));

Я немного искал "parse manifest.mf" "manifest.mf format" и т.д., и я нахожу много информации о значении заголовков (например, в пакетах OSGI, стандартных Java-баночках и т.д.), но это не то, что я ищу.

Посмотрев на пример файлов manifest.mf, я мог бы, вероятно, реализовать что-то, чтобы его разобрать (переформатировать формат), но я не буду знать, действительно ли моя реализация правильна. Поэтому я также не ищу кого-то, кто быстро сбрасывал функцию синтаксического анализа, поскольку он испытывает такую ​​же проблему).

Хороший ответ на мой вопрос может указать мне на спецификацию формата (поэтому я могу написать свою собственную правильную функцию синтаксического анализа). Лучший ответ указывает мне на существующую библиотеку с открытым исходным кодом, которая уже имеет правильную реализацию.

[*] = https://gist.github.com/kdvolder/6625725

Ответ 1

Файлы MANIFEST.MF могут быть прочитаны с помощью класса Manifest:

Manifest manifest = new Manifest(new FileInputStream(new File("MANIFEST.MF")));

Затем вы можете получить все записи, выполнив

Map<String, Attributes> entries = manifest.getEntries();

И все основные атрибуты:

Attributes attr = manifest.getMainAttributes();

Рабочий пример

Мой MANIFEST.MF файл:

Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

Мой код:

Manifest manifest = new Manifest(new FileInputStream(new File("MANIFEST.MF")));
Attributes attr = manifest.getMainAttributes();

System.out.println(attr.getValue("Manifest-Version"));
System.out.println(attr.getValue("X-COMMENT"));

Вывод:

1.0
Main-Class will be added automatically by build