Zugriff auf Ressourcenpfade in Java-JAR-Dateien
Beim Arbeiten mit Ressourcen, die in einer Java-JAR-Datei gespeichert sind, kann es sein, einen Pfad zur Ressource zu erhalten herausfordernd. Im Gegensatz zu regulären Dateien, die im Dateisystem gespeichert sind, verfügen Ressourcen in einem JAR nicht unbedingt über eine direkt entsprechende Datei.
Der bereitgestellte Codeausschnitt veranschaulicht dieses Problem:
ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("config/netclient.p").getFile());
Dieser Code führt zu a FileNotFoundException, da auf die Ressource nicht als physische Datei im Dateisystem zugegriffen werden kann. Die JAR-Datei wurde möglicherweise nicht in einzelne Dateien erweitert und der Klassenlader selbst stellt möglicherweise kein Dateihandle für die Ressource bereit.
Alternative Lösung
Um den Inhalt zu erhalten einer Ressource innerhalb einer JAR-Datei ist ein alternativer Ansatz die Verwendung von classLoader.getResourceAsStream():
ClassLoader classLoader = getClass().getClassLoader(); PrintInputStream(classLoader.getResourceAsStream("config/netclient.p"));
Dieser Code liest und druckt den Inhalt der Ressource direkt aus, ohne dass Zugriff auf einen Dateipfad erforderlich ist. Wenn es unbedingt erforderlich ist, auf die Ressource als Datei zuzugreifen, können Sie den Stream in eine temporäre Datei kopieren:
File tempFile = File.createTempFile("temp", null); try ( InputStream inputStream = classLoader.getResourceAsStream("config/netclient.p"); OutputStream outputStream = new FileOutputStream(tempFile); ) { IOUtils.copy(inputStream, outputStream); }
Das obige ist der detaillierte Inhalt vonWie greife ich auf Ressourcen in einer Java-JAR-Datei zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!