Wie lassen sich der Inhalt eines *.jar-Archivs und die Einträge
im Manifest auslesen?
Innerhalb des Konstruktors der Beispielklasse ist ein try-catch-Block
deklariert, der notwendig ist, um eventuelle Ein-Ausgabe-Fehler beim
Lesen der Jar-Datei abzufangen. Mittels des absoluten Pfades zum Archiv
wird in ihm zunächst ein JarFile-Objekt
erzeugt, dessen Einträge durch
die Methode entries() in eine
Enumeration eingelesen werden.
Über sie wird
iteriert und für jeden Eintrag mit getName()
der Name ermittelt und ausgegeben.
import java.io.IOException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class JarLesen {
public JarLesen() {
String path = "meineJar.jar";
JarFile jFile = null;
JarEntry jEntry = null;
Entry<?, ?> entry = null;
try {
jFile = new JarFile(path);
Enumeration<JarEntry> jEntries = jFile.entries();
while(jEntries.hasMoreElements()){
jEntry = jEntries.nextElement();
System.out.println(jEntry.getName());
}
Set<?> set = jFile.getManifest().getMainAttributes().entrySet();
Iterator<?> it = set.iterator();
while (it.hasNext()) {
entry = (Entry<?, ?>) (it.next());
System.out.println(entry);
String key = entry.getKey().toString();
String value = entry.getValue().toString();
System.out.println("Key: " + key + ", Value: " + value + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new JarLesen();
}
}
Um auf die Manifesteinträge zuzugreifen, wird als erstes das Manifest selbst
mit der Methode
JarFile.getManifest() ermittelt.
Seinem Manifest-Objekt
lassen sich mit getMainAttributes()
die Attribute entlocken. Sie stellen
Schlüssel-Wert-Paare dar, die zur Aufschlüsselung in ein
Set gelesen werden.
Bei einem Set
(Menge) handelt es sich um ein Interface,
das von Collection abgeleitet
ist und eine ungeordnete Sammlung darstellt, die keine doppelten Einträge
enthält. Die Methode iterator()
gibt ein Iterator-Objekt zurück, mit dem
die Menge durchlaufen werden kann. Sie enthält
Entry-Elemente, deren
Schlüssel mit Hilfe von getKey()
und deren Werte mit getValue()
ausgelesen werden können.