Как получить корневой путь веб-проекта в Java EE
Я использую Java EE для моего динамического веб-проекта. И я поместил файл sitemap.xml в корневой каталог. Теперь мне нужен путь к этому файлу для изменения. Я попробую:
String path = getClass().getClassLoader().getResource(".").getPath() +"\\sitemap.xml";
но The system cannot find the file specified
, Я использую окно, что мне нужно изменить, когда я загружаю свой проект на хостинг Linux?
2 ответа
ClassLoader#getResource()
находит только пути к классам, а не веб-ресурсы. sitemap.xml
это явно веб-ресурс. Вы должны использовать ServletContext#getResource()
вместо этого, или его аналог JSF ExternalContext#getResource()
- как указано в истории ваших вопросов, вы используете JSF.
URL url = externalContext.getResource("/sitemap.xml");
Или только для чтения:
InputStream input = externalContext.getResourceAsStream("/sitemap.xml");
Как правило, вас вообще не должен интересовать фактический путь к файловой системе диска. Обычно это местоположение временной папки или даже место в памяти.
Не имеющий отношения к конкретному вопросу, написание к нему - отдельная история. Ни ресурсы classpath, ни веб-ресурсы не предназначены для записи из приложения Java EE. Даже если бы это было возможно (т. Е. Это не ресурс в памяти), все изменения будут полностью потеряны при каждом повторном развертывании WAR или даже при перезапуске сервера по той простой причине, что эти изменения не отражаются в оригинале. Файл WAR. Учитывая конкретное имя файла "sitemap.xml", у меня сложилось впечатление, что вы намеревались создать более постоянное хранилище. В этом случае я настоятельно рекомендую поискать другое решение. Например, сохраняйте файл по фиксированному пути вне WAR или просто в структуре данных в базе данных.
Прежде всего, старайтесь не использовать разделитель файлов Windows "\", потому что он зависит от платформы. Вместо этого вы можете использовать "/" (насколько я помню, его следует заменить JVM на подходящий разделитель) или, что еще лучше, File.separator.