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;
import javax.swing.SwingUtilities;
public class JarLesen {
public static void readJar(String path) {
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) {
String path = "meineJar.jar";
readJar(path);
}
}
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.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.