Каков правильный способ анализа записей файла 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