Ładuję plik tekstowy z pakietu w skompilowanym pliku JAR mojego projektu Java. Odpowiednia struktura katalogów jest następująca:
/src/initialization/Lifepaths.txt
Mój kod ładuje plik, wywołując Class::getResourceAsStream
a 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();}
}
Wydruk zawsze będzie drukowany null
, bez względu na to, z czego korzystam. Nie jestem pewien, dlaczego powyższe nie działa, więc próbowałem też:
"/src/initialization/Lifepaths.txt"
"initialization/Lifepaths.txt"
"Lifepaths.txt"
Żadna z tych prac. Do tej pory przeczytałem wiele pytań na ten temat, ale żadne z nich nie było pomocne - zwykle mówią tylko, aby ładować pliki przy użyciu ścieżki katalogu głównego, co już robię. To lub po prostu załaduj plik z bieżącego katalogu (po prostu załaduj filename
), co również próbowałem. Plik jest kompilowany do pliku JAR w odpowiednim miejscu o odpowiedniej nazwie.
Jak to rozwiązać?
Lifepaths.class
. Biorąc to pod uwagę, dlaczego getClassLoader()
pozwala to działać? (Napisz też odpowiedź!)
Lifepaths.getClass()
? Nie ma takiej statycznej metody zdefiniowanej w Object ...
getResource(String)
. BTW - Zawsze miałem problemy z nakłonieniem któregokolwiek z nich do pracy w static
kontekście. Problem polega na tym, że uzyskany moduł ładujący jest przeznaczony dla klas J2SE. Musisz uzyskać dostęp do modułu ładującego klasy kontekstu, który jest przeznaczony dla samej aplikacji.