Якщо він вже є у classpath, то просто отримайте його з classpath, а не з файлової системи диска. Не спішись із відносними шляхами в 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?