Java (Maven web app), получение полного пути к файлу для файла в папке ресурсов?

Я работаю с проектом, который настроен с использованием стандартной структуры каталогов Maven, поэтому у меня есть папка под названием "ресурсы", и в ней я сделал папку под названием "шрифты", а затем поместил в нее файл. Мне нужно пройти в полном String путь к файлу (файла, который находится в моей структуре проекта, в resources/fonts/somefont.ttf) к объекту, который я использую, из сторонней библиотеки, как показано ниже, я искал это некоторое время, но стал немного смущен относительно правильного способа сделать это. У меня есть пробовал, как показано ниже, но не может найти его. Я посмотрел на использование ResourceBundle но это, казалось, включало в себя создание фактического File объект, когда мне просто нужен путь, чтобы перейти в метод, подобный приведенному ниже (не имейте фактического вызова метода передо мной, поэтому просто приведите пример из моей памяти):

FontFactory.somemethod("resources/fonts/somefont.ttf");

Я думал, что есть способ, с проектом со стандартной структурой каталогов Maven, чтобы получить файл из папки ресурсов без необходимости использовать полный относительный путь из класс / упаковка. Любые советы по этому поводу очень ценятся.

Я не хочу использовать жестко закодированный путь, так как разные разработчики, которые работают над проектом, имеют разные настройки, и я хочу включить это как часть проекта, чтобы они получили его непосредственно при проверке источника проекта.

это для веб-приложения (Struts 1.3 app), и когда я смотрю в взорванный файл войны (который я запускаю проект через Tomcat), файл at:

<Exploded war dir>/resources/fonts/somefont.ttf

5 ответов


код:

import java.io.File;
import org.springframework.core.io.*;

public String getFontFilePath(String classpathRelativePath) {
    Resource rsrc = new ClassPathResource(classpathRelativePath);
    return rsrc.getFile().getAbsolutePath();
}

в вашем случае classpathRelativePath будет чем-то вроде "/resources/fonts/somefont.ТЦФ."


вы можете использовать указанные ниже, чтобы получить путь к файлу:

String fileName = "/filename.extension"; //use forward slash to recognize your file
String path = this.getClass().getResource(fileName).toString();

используйте / передайте путь к своим методам.


Если ваш каталог ресурсов находится в корне вашей войны, это означает ресурсы / шрифты / somefont.ttf будет "виртуальным путем", где этот файл доступен. Ты можешь!--1-->получить "реальный путь"--абсолютный путь к файловой системе--из ServletContext. Обратите внимание (в документах), что это работает только в том случае, если война взорвана. Если ваш контейнер запускает приложение из файла war без его расширения, этот метод не будет работать.


URL resource = getServletContext().getResource("/WEB-INF/classes/fonts/somefont.ttf");
String relativePath = resource.getPath();

вы можете найти ответ на вопрос по аналогичным строкам, которые у меня были загрузка XML-файлов во время тестового запуска Maven

ответ BobG должны работать. Хотя вам нужно иметь в виду, что путь для файла ресурсов относительно пути текущего класса. Как ресурсы, так и исходные файлы java находятся в classpath