Якщо він вже є у 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
?