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

0
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.

0
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
0

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