Доступ к файловой системе из Java в Spring и Tomcat - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь выполнить xml-сортировку с помощью spring / tomcat ... мое приложение развернуто как обычный файл войны.Файл действительно копируется в правильное местоположение WEB-INF/classes/myData.xml, но я не уверен, как получить к нему доступ с помощью Java и, в частности, моего сервисного уровня Spring.Как обычно, я получаю доступ к файлам из самого контекста приложения.

Я хочу сделать это:

final File xml = new File("WEB-INF/classes/myData.xml");

, но в моей сборке для разработчиков он идет в F: \ eclipse \ WEB-INF \ classes \ myData.xml , а не каталог развертывания внутри tomcat

Ответы [ 2 ]

6 голосов
/ 05 января 2012

Весной, чистый способ сделать это с помощью Java использует ClasspathResource:

Resource myData = new ClasspathResource("myData.xml"):

В качестве альтернативы, если этот бин Spring выполняет работу, вы можете внедрить его из XML, например,

<property name="myResource" value="classpath:myData.xml"/>

... при условии, что myResource - это свойство javabean для вашего bean-компонента Spring типа Resource.

Каталог WEB-INF/classes автоматически находится на пути к классам сервера, вам не нужно (не обязательно) указывать это в пути явно.

Интерфейс Spring Resource предлагает различные способы захвата самих данных (например, getInputStream())

1 голос
/ 05 января 2012

Если вы полны решимости получить путь, ведущий к вашему ресурсу, вы можете получить его URL-адрес и затем проанализировать его следующим образом:

    URL url = getClass().getResource("/WEB-INF/web.xml");
    String path = url.toString();
    if (path.startsWith("file:/")) {
        path = path.substring("file:/".length());
        File file = new File(path); 
        ...do something with the file...
    }

Однако есть предостережение: ваш ресурс может бытьчитать непосредственно из архива JAR, а не из простого файла в вашей файловой системе, и, таким образом, на самом деле не доступен через объект File.Вышеприведенный фрагмент работал в JBoss (который включает Tomcat), но JBoss взрывает архив WAR перед его развертыванием - не уверен, будет ли это делать и чистый Tomcat.

Основной вопрос: зачем вам на самом делеполучить ресурс в виде объекта File?Может быть, вам достаточно получить его URL?Или, может быть, вам просто нужен доступ для чтения?

Если все, что вам нужно, это доступ на чтение, самый простой способ получить любой ресурс на вашем пути к классам (например, приведенный выше web.xml) - это просто позвонить:

InputStream in = getClass().getResourceAsStream("/WEB-INF/web.xml")

Если вам нужен доступ для записи в файл, гораздо лучшим решением будет предварительная настройка каталога (например, через web.xml), распаковка всех необходимых файлов (например, через приведенный выше getResourceAsStream).метод), а затем отредактируйте и получите к ним доступ из предопределенного каталога, который не зависит от сервера приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...