Как открыть файл ресурса в WAR, используя строку pathname? - PullRequest
2 голосов
/ 19 марта 2012

Я строю WAR / EAR, и один из моих компонентов читает во многих пользовательских файлах конфигурации, используя File IO:

Reader reader = new BufferedReader(new FileReader(path));

Путь выше - это строка, которая передается каксвойство к этому классу через файл applicationContext.xml Spring.

Какой путь строки я должен указать, если я хочу поместить все эти файлы конфигурации в WAR?Можно ли это сделать?Или компонент неверен и должен использовать вместо него getResourceAsStream()?

Я просмотрел и нашел много информации о getResource() и URI .Однако я не смог найти, можно ли создать правильный путь к файлу для ресурса внутри applicationContext.xml

Ответы [ 2 ]

5 голосов
/ 19 марта 2012

В весенней среде лучше использовать API ресурсов весны Простой пример:

@Inject
private ResourceLoader resourceLoader;

public void someMethod() {
    Resource resource = resourceLoader.getResource("file:my-file.xml");
    InputStream is = null;
    try {
        is = resource.getInputStream();
        // do work
        ....
    } finally {
        IOUtils.closeQuetly(is);
    }
}

Если вы хотите получить доступ к внешним файлам (не относящимся к classpath ресурсам, которые должны быть расположены в META-INF / resources в архиве) с нефиксированными путями, вы должны поместить такие пути в файл основных свойств и загрузить его при развертывании приложения.

edit: изменить @Resource на @Inject в примере

2 голосов
/ 19 марта 2012

Ключ к доступу к файлам - сделать их доступными в вашем classpath. По умолчанию в файле WAR все файлы в разделе WEB-INF / classes добавляются в путь к классам, и вы можете ссылаться на эти файлы.

Например: предположим, что это структура вашего файла WAR

webapp.war
 |
 |---> WEB-INF
 |------|
 |      |----> classes
 |              |----> MyResource.properties
 |---> index.html
 |---> images
 |-------|
 |       ----> logo.gif

Вы можете получить доступ к «MyResource.properties», используя следующий API

Reader reader = new BufferedReader(new FileReader("MyResource.properties"));

Надеюсь, это поможет.

Удачи!

...