Я понимаю, что файл встроен в WAR и вы ищете метод ExternalContext#getRealPath()
для его разрешения на основе веб-относительного пути. Согласно Javadoc, этот метод представлен в JSF 2.0 и не существует в JSF 1.x. Вы, кажется, используете JSF 1.x, иначе вы бы не задавали этот вопрос. Вместо этого вам нужно использовать ServletContext#getRealPath()
(это также то, что делегирует новый метод JSF 2.0, под обложками).
String relativeWebPath = "/resources/img/useravatars/" + ...;
ServletContext servletContext = (ServletContext) externalContext.getContext();
String absoluteDiskPath = servletContext.getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
// ...
Однако есть большое НО : вы можете и не должны записывать в расширенную WAR. Удаление файлов тоже запись. Каждый раз, когда вы повторно развертываете WAR или перезапускаете сервер, каждое изменение будет отменено, и расширенная WAR сохранит свое первоначальное состояние, тем самым потеряя все изменения, сделанные в расширенной WAR с момента последнего развертывания.
Вам действительно нужно хранить эти файлы во внешнем местоположении, корневое местоположение которого затем может быть жестко закодировано или определено в каком-либо внешнем файле конфигурации (свойств). Таким образом, вы можете использовать java.io.File
материал обычным способом.
Существует несколько способов обслуживания файлов из внешнего местоположения. Вы можете найти их все в ответе на следующий вопрос: Загрузить изображения из-за пределов папки webapps / webcontext / deploy, используя тег или