Как получить доступ к файлу в папке WEB-INF в классе java - программирование
Подтвердить что ты не робот

Как получить доступ к файлу в папке WEB-INF в классе java

У меня есть простой Java-класс в веб-приложении и вы хотите прочитать файл конфигурации в папке WEB-INF. Я знаю способ доступа к файлу, если он находится в папке classpath (WEB-INF/classes). Поскольку папка WEB-INF/classes предназначена для файлов .class, я хочу сохранить только файл конфигурации в папке WEB-INF.

Может ли кто-нибудь сказать мне, как я могу получить к нему доступ из моего класса Java?

4b9b3361

Ответ 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"));

Ура!!