Как получить доступ к файлу в папке WEB-INF в классе java
У меня есть простой Java-класс в веб-приложении и вы хотите прочитать файл конфигурации в папке WEB-INF
. Я знаю способ доступа к файлу, если он находится в папке classpath (WEB-INF/classes
). Поскольку папка WEB-INF/classes
предназначена для файлов .class
, я хочу сохранить только файл конфигурации в папке WEB-INF
.
Может ли кто-нибудь сказать мне, как я могу получить к нему доступ из моего класса Java?
Ответы
Ответ 1
ServletContext.getResourceAsStream() загрузит файл с заданным путем относительно корня файла WAR. Что-то вроде:
ServletContext ctx;
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");
Основная проблема здесь в том, что для этого необходим доступ к контексту сервлета. У вас есть это в сервлете или в фильтре, но не в не-веб-компоненте, еще в приложении. У вас есть несколько вариантов:
- Сделать контекст сервлета доступным с веб-уровня до уровня обслуживания, с помощью переменной области приложения или инъекции или каким-либо другим способом.
- Поместите код загрузки ресурса в веб-слой и покажите его на уровне службы
- Загрузите конфигурацию на веб-уровне и передайте ее на сервисный уровень
Ответ 2
Вы можете получить абсолютный путь сервлета, используя метод getRealPath()
ServletContext
, а затем добавьте WEB-INF
к пути, который вы получите. Я думаю, что это очень просто, могут быть и другие ответы.
Ответ 3
"новый FIleInputStream ( Utility.class.getClassLoader(). GetResource (keyFileName).getPath()
)"
работал на меня.
Здесь "Утилита" - это мое имя класса, где код вызывает эту строку, "keyFileName" - это файл, который мне нужно открыть
Ответ 4
hey you all care for context related file loading like application context , web.xml ,config and property file
Вот как загружать java файл в любой файл под WEB-INF
, но он хранится на другой структуре, например, в подпапке reportFile
ваш файл или подпапку снова report01
-
fullpath is = /WEB-INF/reportFile/report01/report.xml
, я попробовал много возможностей загрузить и прочитать этот xml файл... ни один из вышеперечисленных не работал у меня, но вот трюк для будущего использования...
In Action or inservice class you know interface implementation class
no imports
, что также является хорошей частью.
объявить свой файловый объект
File myClass = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
System.out.println("Finding calss path first then remove classes from the path " + myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFIle/report01/reports.xml")
2. Загрузите путь, удалив classes
из вышеперечисленного и добавьте свой конкретный путь
File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")
Тогда
вы можете даже разобрать его с помощью анализатора xml или сделать что-нибудь
document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml"));
Ура!!