这让我疯狂。我正在用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。
非常感谢任何帮助。
答案 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
返回包含给定虚拟路径的实际路径的String。对于 例如,路径“/index.html”返回服务器上的绝对文件路径 文件系统将由“http://host/contextPath/index.html”请求提供, 其中contextPath是此ServletContext的上下文路径..
返回的真实路径将采用适合计算机的形式 servlet容器正在运行的操作系统,包括正确的操作系统 路径分隔符。如果servlet容器无法转换,则此方法返回null 出于任何原因(例如内容出现时)到真实路径的虚拟路径 从.war档案中获得。)
答案 1 :(得分:1)
也许您可以将图片放入war文件并使用getResourceAsStream来获取文件?
在这种情况下,路径将相对于war文件的根