Java:如何验证localhost上的映像文件是否存在

时间:2010-09-18 02:16:31

标签: java servlets

这让我疯狂。我正在用Java编写一个Web应用程序,我想要做的就是验证是否存在保存在Web根目录下的/ images文件夹中的图像。

我做过的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”。我所追求的是像exists()这样的测试,它可能使用一个URL,我可以将其与引用站点根目录的其他方法或参数结合起来,我可以构建相对于该URL的其余URL。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

由于文档是Web根目录,因此您应该能够使用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)

  

返回包含给定虚拟路径的实际路径的String。对于   例如,路径“/index.html”返回服务器上的绝对文件路径   文件系统将由“http://host/contextPath/index.html”请求提供,   其中contextPath是此ServletContext的上下文路径..

     

返回的真实路径将采用适合计算机的形式   servlet容器正在运行的操作系统,包括正确的操作系统   路径分隔符。如果servlet容器无法转换,则此方法返回null   出于任何原因(例如内容出现时)到真实路径的虚拟路径   从.war档案中获得。)

答案 1 :(得分:1)

也许您可以将图片放入war文件并使用getResourceAsStream来获取文件?

在这种情况下,路径将相对于war文件的根