Jeśli jest już w ścieżce klas, po prostu pobierz ją ze ścieżki klasy zamiast z dysku systemowego. Nie majstrować przy ścieżkach względnych java.io.File. Są one zależne od bieżącego katalogu roboczego, nad którym nie masz całkowitej kontroli z wnętrza kodu Java.
Zakładając, że ListStopWords.txtznajduje się w tym samym pakiecie co twoja FileLoaderklasa, wykonaj:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
Lub jeśli wszystko, czego ostatecznie szukasz, jest w rzeczywistości InputStreamtym:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Jest to z pewnością preferowane w stosunku do tworzenia pliku, new File()ponieważ urlniekoniecznie musi reprezentować ścieżkę systemu plików na dysku, ale może również reprezentować ścieżkę wirtualnego systemu plików (co może się zdarzyć, gdy plik JAR zostanie rozszerzony do pamięci zamiast do folderu tymczasowego w systemie plików na dysku) lub nawet ścieżka sieciowa, która nie jest z definicji przyswajalna przez Filekonstruktora.
Jeśli plik to -jak wskazówka dotycząca nazwy pakietu- jest w rzeczywistości pełnowartościowym plikiem właściwości (zawierającym key=valuewiersze) z tylko „złym” rozszerzeniem, to możesz podaćInputStream natychmiast do load()metody.
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Uwaga: kiedy próbujesz uzyskać do niego dostęp z statickontekstu wewnętrznego , użyj FileLoader.class(lub cokolwiek YourClass.class) zamiast getClass()w powyższych przykładach.
properties.filesdla2?