Если он уже находится в пути к классам, просто получите его из пути к классам, а не из файловой системы диска. Не возиться с относительными путями в 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()
в приведенных выше примерах.