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