Если он уже находится в пути к классам, просто получите его из пути к классам, а не из файловой системы диска. Не возитесь с относительными путями java.io.File
. Они зависят от текущего рабочего каталога, которым вы не можете управлять изнутри кода Java.
Предполагая, что он ListStopWords.txt
находится в том же пакете, что и ваш FileLoader
класс, выполните:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
Или, если все, что вам нужно, на самом деле является одним InputStream
из них:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Это, безусловно, предпочтительнее, чем создание, new File()
потому что он url
может не обязательно представлять путь к файловой системе диска, но он также может представлять путь к виртуальной файловой системе (что может произойти, когда JAR расширяется в память, а не во временную папку в файловой системе диска) или даже сетевой путь, которые по определению не могут быть усвоены File
конструктором.
Если файл - как подсказывает имя пакета - на самом деле является файлом полноценных свойств (содержащим key=value
строки) только с «неправильным» расширением, то вы можете InputStream
немедленно передать его load()
методу.
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Примечание: когда вы пытаетесь получить к нему доступ из внутреннего static
контекста, используйте FileLoader.class
(или что-то еще YourClass.class
) вместо getClass()
приведенных выше примеров.
properties.files
для2
?