Java (веб-приложение maven), получить полный путь к файлу в папке ресурсов? - PullRequest
6 голосов
/ 25 августа 2011

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

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

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

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

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

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

Ответы [ 5 ]

11 голосов
/ 25 августа 2011

Код:

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.ttf".

3 голосов
/ 04 января 2012

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

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

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

1 голос
/ 28 октября 2013
URL resource = getServletContext().getResource("/WEB-INF/classes/fonts/somefont.ttf");
String relativePath = resource.getPath();
1 голос
/ 25 августа 2011

Если ваш каталог ресурсов находится в корне вашей войны, это означает, что resources / fonts / somefont.ttf будет «виртуальным путем», где этот файл доступен.Вы можете получить "реальный путь" - абсолютный путь к файловой системе - из ServletContext.Обратите внимание (в документации), что это работает, только если разорвана WAR.Если ваш контейнер запускает приложение из файла war, не раскрывая его, этот метод не будет работать.

0 голосов
/ 25 августа 2011

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

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

...