Ich lade eine Textdatei aus einem Paket in eine kompilierte JAR meines Java-Projekts. Die relevante Verzeichnisstruktur lautet wie folgt:
/src/initialization/Lifepaths.txt
Mein Code lädt eine Datei, indem er aufruft Class::getResourceAsStream
, um a zurückzugeben InputStream
.
public class Lifepaths {
public static void execute() {
System.out.println(Lifepaths.class.getClass().
getResourceAsStream("/initialization/Lifepaths.txt"));
}
private Lifepaths() {}
//This is temporary; will eventually be called from outside
public static void main(String[] args) {execute();}
}
Der Ausdruck wird immer gedruckt null
, egal was ich benutze. Ich bin mir nicht sicher, warum das oben genannte nicht funktionieren würde, also habe ich auch versucht:
"/src/initialization/Lifepaths.txt"
"initialization/Lifepaths.txt"
"Lifepaths.txt"
Keine dieser Arbeiten. Ich habe bisher zahlreiche Fragen zu diesem Thema gelesen , aber keine davon war hilfreich - normalerweise wird nur gesagt, dass Dateien über den Stammpfad geladen werden sollen, was ich bereits tue. Das, oder laden Sie einfach die Datei aus dem aktuellen Verzeichnis (nur laden ), was ich auch versucht habe. Die Datei wird an der entsprechenden Stelle mit dem entsprechenden Namen in die JAR kompiliert. filename
Wie löse ich das?
Lifepaths.class
. Davon abgesehen, warum lässt getClassLoader()
es funktionieren? (Auch
Lifepaths.getClass()
? Es gibt keine solche statische Methode in Objekt ...
getResource(String)
. Übrigens: Ich hatte immer Probleme, einen von beiden in einem static
Kontext zum Laufen zu bringen. Das Problem ist im Grunde, dass der erhaltene Klassenlader derjenige ist, der für J2SE-Klassen bestimmt ist. Sie müssen Zugriff auf die bekommen Kontext Class Loader , die für die Anwendung vorgesehen ist selbst.