Java auf eine Datei aus einer anderen JAR zugreifen?

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.


jamieZocktYT143 
Beitragsersteller
 04.07.2021, 21:02

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 ;)

Cwmystwyth  04.07.2021, 21:07
@jamieZocktYT143

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.

jamieZocktYT143 
Beitragsersteller
 04.07.2021, 21:08
@Cwmystwyth
  1. Das sind ganz normale Screenshot links die jeder kennen sollte
  2. 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;
  }
}