Если вы полны решимости получить путь, ведущий к вашему ресурсу, вы можете получить его 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).метод), а затем отредактируйте и получите к ним доступ из предопределенного каталога, который не зависит от сервера приложений.