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

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

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

 SJuan7614 окт. 2012 г., 17:54
Я бы сказал, чтоgetResourceAsStream должно сработать
 Tom Anderson14 окт. 2012 г., 18:28
Я (ориентировочно) согласен с @Thinhbk: WEB-INF - это место для конфигурации компонентов, связанных с Интернетом, таких как сервлеты и фильтры. Конфигурация дляпростой Java-класс компоненты должны быть на пути к классам. Может быть.
 Thinhbk14 окт. 2012 г., 17:56
Конфигурация должна быть в src / main / resources и будет встроена в папку классов при развертывании веб-приложения. Зачем вам нужно поместить файл конфигурации в папку WEB-INF?
 Newbie14 окт. 2012 г., 18:52
я чувствуюWEB-INF/classes папка не должна содержать никаких файлов конфигурации.
 Mr T.14 окт. 2012 г., 17:54
Если файл конфигурации предназначен для классов Java, зачем помещать его вWEB-INF папка ... почему бы не вsrc/main/resources папка и доступ к ней оттуда?

Ответы на вопрос(4)

getRealPath() методServletContext а затем добавитьWEB-INF на путь, который вы получаете. Я думаю, что это очень просто, могут быть и другие ответы.

 Newbie14 окт. 2012 г., 18:56
Я знаю, как это сделать с помощьюServletContext, Но то, что я ищу, это сделать это в простом классе Java. "

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

Ура !!

ServletContext.getResourceAsStream () загрузит файл по заданному пути относительно корня файла WAR. Что-то вроде:

InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");

Основная проблема заключается в том, что вам нужен доступ к контексту сервлета, чтобы сделать это. Вы имеете это в сервлете или фильтре, но не в не-веб-компоненте далее в приложении. У вас есть несколько вариантов:

Сделайте контекст сервлета доступным с веб-уровня на сервисный уровень через переменную области приложения, или внедрение, или каким-либо другим способомПоместите код загрузки ресурсов в веб-слой и предоставьте его сервисному слою.Загрузите конфигурацию в веб-слой и передайте ее на сервисный уровень
 Tom Anderson14 окт. 2012 г., 22:09
Не то, что я знаю из. Простой Java-класс понятия не имеетчасть веб-приложения, так чтонет никакого способа, которым он мог бы иметь доступ к любому API для выполнения действий, специфичных для веб-приложений!
 Newbie14 окт. 2012 г., 18:54
Нет прямого способа сделать это в не-веб-компоненте, как обычный Java-класс?

eyFileName) .getPath ()) " работал на меня.

Вот "Полезность" мое имя класса, где код вызывает эту строку "keyFileName» это файл, который мне нужно открыть

Ваш ответ на вопрос