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

Java:如何验证localhost上的映像文件是否存在,java,servlets,Java,Servlets,这让我发疯。我正在用Java编写一个web应用程序,我只想验证是否存在保存到web根目录下的/images文件夹中的图像 我所做的1000000次谷歌搜索似乎表明File.existspath方法是可行的。但出于显而易见的原因,我不想硬编码路径 实际上,我正在使用的测试映像文件存在于我的D-drive上,比如说,D:\documents\images\myimage.jpg。GlassFish是我的本地服务器,我认为在部署我的应用程序时,我的图像文件不会复制到GlassFish文件夹中,因此我认

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

我所做的1000000次谷歌搜索似乎表明File.existspath方法是可行的。但出于显而易见的原因,我不想硬编码路径

实际上,我正在使用的测试映像文件存在于我的D-drive上,比如说,D:\documents\images\myimage.jpg。GlassFish是我的本地服务器,我认为在部署我的应用程序时,我的图像文件不会复制到GlassFish文件夹中,因此我认为唯一的物理副本是D:驱动器上的副本

我能得到的唯一方法是:

boolean fileExists = new File(somePath).exists();
要返回TRUE,请使用字符串D:\documents\images\myimage.jpg。我所追求的是一个类似exists的测试,它可能使用一个URL,我可以将它与引用站点根的其他方法或参数结合起来,然后我可以构建与之相关的URL的其余部分


非常感谢您的帮助。

由于文档是web根目录,您应该能够使用ServletContext.getRealPathString方法

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
返回包含给定虚拟路径的实际路径的字符串。对于 例如,path/index.html返回服务器上的绝对文件路径 文件系统将通过请求, 其中contextPath是此ServletContext的上下文路径

返回的实际路径将采用适合计算机的形式,并且 运行servlet容器的操作系统,包括适当的 路径分隔符。如果servlet容器无法转换,则此方法返回null 从虚拟路径到真实路径的任何原因,例如,当内容被复制时 从.war档案中提供


由于文档是web根目录,因此应该能够使用ServletContext.getRealPathString方法

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
返回包含给定虚拟路径的实际路径的字符串。对于 例如,path/index.html返回服务器上的绝对文件路径 文件系统将通过请求, 其中contextPath是此ServletContext的上下文路径

返回的实际路径将采用适合计算机的形式,并且 运行servlet容器的操作系统,包括适当的 路径分隔符。如果servlet容器无法转换,则此方法返回null 从虚拟路径到真实路径的任何原因,例如,当内容被复制时 从.war档案中提供


也许你可以把你的图像放在war文件中,然后用它来获取文件


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

也许您可以将图像放在war文件中并使用来获取文件


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

ServletContext在servlets中通过继承的方法getServletContext可用。没有必要先创建一个会话。我想会的,但我确实看不到。它位于HttpServlet扩展的类中。同样,它是遗传的。只需执行字符串realPath=getServletContext.getRealPathvirtualPath。例如,见。非常好。我已经习惯于在MVC框架中编写代码,通常使servletRequest在操作代码中可用,而不是在servlet本身中。我误读了你的评论。平均框架提供了方便的方法来返回原始ServletContext,而无需创建会话。至少,据我所知,Spring、Struts和JSF是这样做的。没有必要先创建一个会话。我想会的,但我确实看不到。它位于HttpServlet扩展的类中。同样,它是遗传的。只需执行字符串realPath=getServletContext.getRealPathvirtualPath。例如,见。非常好。我已经习惯于在MVC框架中编写代码,通常使servletRequest在操作代码中可用,而不是在servlet本身中。我误读了你的评论。平均框架提供了方便的方法来返回原始ServletContext,而无需创建会话。至少,据我所知,Spring、Struts和JSF确实如此。