Java: как проверить, существует ли файл изображения на локальном хосте - PullRequest
1 голос
/ 18 сентября 2010

Это сводит меня с ума.Я пишу веб-приложение на Java, и все, что я хочу сделать, - это проверить наличие изображения, сохраненного в папке / images прямо под корнем веб-сайта.

Похоже, что выполненные мной поиски в Google насчитывали 1 000 000что метод File.exists (путь) - это путь.Но по понятным причинам я не хочу жестко кодировать путь.

Физически файл тестового образа, с которым я работаю, существует на моем D-диске, скажем, в D: \ documents \ images\ myimage.jpg.GlassFish - это мой локальный сервер, и я не думаю, что мои файлы изображений реплицируются в «папку GlassFish» при развертывании моего приложения, поэтому я думаю, что единственная физическая копия - это копия на диске D:

Единственный способ получить:

boolean fileExists = new File(somePath).exists();

для возврата TRUE - использовать строку «D: \ documents \ images \ myimage.jpg».После этого я получил тест, подобный существует (), который, возможно, использует URL-адрес, который я мог бы связать с каким-либо другим методом или параметром, который ссылается на корень сайта, и я мог бы построить оставшуюся часть URL относительно этого.

Любая помощь очень ценится.

Ответы [ 2 ]

3 голосов
/ 18 сентября 2010

Поскольку документы являются корневым веб-сайтом, вы должны иметь возможность использовать метод ServletContext.getRealPath (String).

ServletContext context = servletRequest.getSession().getServletContext();
// Or if you have the servlet instead of request, use this:
// ServletContext = servlet.getServletContext(); // see comment by BalusC
String virtualPath = "/images/myimage.jpg";
String realPath = context.getRealPath(virtualPath);

// realPath will be D:\documents\images\myimage.jpg

http://download.oracle.com/javaee/5/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String)

Возвращает строку, содержащуюреальный путь для данного виртуального пути.Например, путь "/index.html" возвращает абсолютный путь к файлу в файловой системе сервера, который будет обслуживаться запросом "http://host/contextPath/index.html",, где contextPath - это контекстный путь этого ServletContext ..

Реальный возвращенный путь будет в форме, соответствующей компьютеру и операционной системе, в которой работает контейнер сервлета, включая надлежащие разделители пути. Этот метод возвращает значение null, если контейнер сервлета не может преобразовать виртуальный путь в реальный путь для любогопричина (например, когда содержимое становится доступным из архива .war).

1 голос
/ 18 сентября 2010

Может быть, вы можете поместить свои изображения в файл war и использовать getResourceAsStream для получения файла?

В этом случае путь будет относительно корня файла war

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