Java auf eine Datei aus einer anderen JAR zugreifen?
Hallo, mein Problem ist seit einigerzeit das ich eine Klasse aus einer anderen JAR Datei starten möchte, habe viel rumprobiert und aber nichts im Internet gefunden, hoffe mir kann einer helfen
LG Jamie
2 Antworten
Die referenzierte Jar muss im classpath eingetragen sein. Wenn Du das Programm mit dem Befehl "JAVA" startest, wäre das die Option "-classpath".
Startest Du das Programm über eine IDE (Eclipse), findest Du den Parameter in den Run-Einstellungen.
Sorry, aber wenn Du Deine Frage nicht im Text klar machen kannst, dann wirst Du von mir keine Antwort bekommen. Ganz gewiss werde ich nicht irgendwelchen dubiosen Links folgen.
- Das sind ganz normale Screenshot links die jeder kennen sollte
- Wenn du meine Frage nicht verstehst kann ich da nichts dafür
Sofern die externe JAR im Classpath eingetragen ist, sollte ein Zugriff auf die Datei via getResourceAsStream gelingen.
try (InputStreamReader reader = new InputStreamReader(getClass().getResourceAsStream("FakeAddon.txt")) {
// ...
}
Allerdings wird dabei nur das erste Vorkommen dieser Datei herausgegriffen. Das heißt, wenn du mehrere JAR-Dateien mit einer Datei selben Namens im Classpath vorliegen hast, werden diese Vorkommen ignoriert.
Eine zweite Option wäre der Aufbau einer URL-Verbindung zur JAR-Datei:
URL url = new URL("jar:file:/path/to/lib.jar!/FakeAddon.txt");
JarURLConnection jarConnection = (JarURLConnection)url.openConnection();
InputStream inputStream = jarConnection.getInputStream();
// read ...
Lies dazu auch hier.
Und um noch einen dritten Vorschlag zu bieten: Es gibt in der SE ebenso eine JarFile-Klasse. Du kannst über deren Einträge iterieren und via getInputStream den Inhalt einlesen.
JarFile jarFile = new JarFile("/path/to/lib.jar");
final Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if (entry.getName().equals("FakeAddon.txt")) {
InputStream input = jarFile.getInputStream(entry);
// read ...
break;
}
}
Hey, ich glaube du hast mich falsch verstanden, ich möchte auf die Sachen zugreifen und nicht extra in mein Projekt dafür zugreifen, hier mal ein kleines Beispiel:
https://prnt.sc/18kd0zg
https://prnt.sc/18kd4fe
Die "namen" sind in den Dateien drinnen, unter dem File "FakeAddon.txt"
https://prnt.sc/18kd9d5
Hoffe damit konntest du es besser verstehen ;)