Java Dateien aus /resources nutzen

Sp4rky

Cadet 4th Year
Registriert
März 2019
Beiträge
77
Hallo,
ich möchte ganz gern innerhalb meiner Anwendung Daten/Dateien speichern um diese dann zur Laufzeit zu laden und nutzen ( diese sollen später auch mit im jar liegen ).
Jetzt dachte ich eigentlich der richtige Weg wäre, die Dateien unter /resources also da wo auch der META-INF Ordner mit dem Manifest liegt abzulegen und dann über den classpath zur Laufzeit drauf zuzugreifen.
Java:
File file = new File(getClass().getClassLoader().getResource("/eta/dictionaries/storage.etamdict").getFile()); // Verzeichnis /eta/dictionaries/ unterhalb von resources
Leider komme ich so nicht an meine Datei ran. Finden tue ich nur meine package Struktur und den META-INF Ordner.

Irgendetwas muss ich noch übersehen. Ist das überhaupt der richtige Weg um auf interne Dateien zuzugreifen? Muss ich noch in Gradle oder meinem IDE (intelij) irgendwas konfigurieren?

// Alternativ lässt sich der Inhalt der Dateien sicherlich auch direkt mit in den Code packen, da das aber >10MB sind ist das eher nicht so schön.
 
Zuletzt bearbeitet:
Versuche es mal mit
"classpath:/eta/dictionaries/storage.etamdict"
bzw.
"classpath:eta/dictionaries/storage.etamdict"
 
Das funktioniert bei mir leider auch nicht. Bekomme da immer noch eine NulllPointerException davon, so als würde es die Datei nicht finden. (oder ist es irgendwas anderes?)
Muss ich da noch irgendetwas konfigurieren?
 
Zuletzt bearbeitet:
Es gibt hier mehrere Dinge zu beachten:
  • getClass().getClassLoader().getResource("/eta/dictionaries/storage.etamdict").getFile() funktioniert nur im Filesystem während der Entwicklung und nicht mehr aus einem jar-File heraus.
  • In einem jar-File kann man z.B. getClass().getResourceAsStream() verwenden um die Dateiinhalte zu lesen.
  • Manche Entwicklungsumgebungen kopieren nicht alle Dateien in das Outputverzeichnis. Dann muss man die File Extension zu den Resource-Extensions hinzufügen oder einfach eine gängige Extension verwenden. (help/idea/working-with-projects.html#resource-files )
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Sp4rky
Ah okay so funktioniert es tatsächlich.
Das ganze ist scheinbar etwas komplizierter als 'einfach unter resources ablegen' wie ich dachte.
Die Ordner müssen als Abhängigkeit dem Modul hinzugefügt werden damit das ganze funktioniert und dann natürlich den entsprechenden Ordner auch in die Jar packen.

Danke für die Hilfe!
 
Zurück
Oben