Ссылка на файл в Eclipse без жесткого кодирования пути? - PullRequest
1 голос
/ 20 декабря 2011

Я создаю динамический веб-проект в Eclipse, где мне часто приходится писать и читать в и из файла XML. Файл находится в рабочей области моего проекта в папке с именем xml. Мне было интересно, предоставил ли Java какой-либо способ доступа к файлу без жесткого кодирования пути к файлу. Некоторое время я искал решение, но я не нашел ничего действительно ясного. Спасибо!

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Вы можете просто поместить его в путь к классам, как предлагают другие, но вы не сможете писать в него.

Вместо этого укажите абсолютный путь в качестве аргумента виртуальной машины или переменной среды, чтобы вам не нужно было его жестко кодировать.

* 1005 Е.Г. *

-Dconfig.location=/path/to/config/file

с

File xmlFile = new File(System.getProperty("config.location"), "some.xml");
// ...

В качестве совершенно другой альтернативы вы можете рассмотреть базу данных.

0 голосов
/ 20 декабря 2011

Я не думаю, что Servlet API дает вам что-нибудь, что привело бы к надежному, доступному для записи, пути для размещения рабочих файлов во всех контейнерах. Если ваш контейнер запускает WebApp прямо из WAR, getRealPath () не может указывать на то, что вы действительно можете записать. Я думаю, что ваш единственный вариант, который поддерживается здесь, независимо от контейнера, это жестко прописать какой-то путь в web.xml. Сделайте это как параметр контекста, и вы сможете изменить его во время развертывания. В конце дня вы должны объявить полный путь в коде или конфигурации, чтобы получить нужный эффект.

В качестве альтернативы, вам действительно нужно знать имя файла? В некоторых приложениях сервлетов мне удалось получить эффект динамически записываемого хранилища с помощью plain-jane java.io.file.createTempFile: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#createTempFile(java.lang.String, java.lang.String)

0 голосов
/ 20 декабря 2011

Вы можете получить правильный путь, используя следующую информацию из своего сервлета:

String filename = getServletContext().getRealPath("/xml/config.xml");

Примечание:

getRealPath может вернуть null, если файл находится в файле WAR. В этом случае, если ваш файл находится в WEB_INF/classes, то вы можете использовать ServletContext.getResourceAsStream("/config.xml").

См. ссылку :

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