如何获得图像绝对路径?
如何在java中获取图像路径?
我正在使用eclipse,我想在jsp中显示图像,我想给出像“/images/logo.jpg”这样的路径但是在执行页面时它会得到nullpointerexception。
如果我给出完整路径,它的工作方式就像“d:/project/images/logo.jsp”。如何以绝对路径显示图像?
您应该尽可能避免在java.io
使用相对路径。 任何相对路径都将相对于当前工作目录,这取决于您启动应用程序的方式,并且无法从代码内部无法控制。 当作为例如Tomcat服务启动时,它将相对于c:/path/to/tomcat/bin
。 在Eclipse中运行时,它将相对于c:/path/to/eclipse/project/bin
。 在命令控制台中运行时,它将相对于当前打开的文件夹。 等等。 你不想依赖它。 馊主意。
在JSP / Servlet Web应用程序的情况下,基本上有两种方法可靠地使用相对路径获取绝对资源路径:
-
从运行时类路径中检索它(所有类和库都在那里):
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); String path = classLoader.getResource("/images/logo.jpg").getPath();
-
从webcontent (所有JSP文件和
/WEB-INF
文件夹所在的位置)检索它:ServletContext context = getServletContext(); // Inherited from HttpServlet. String path = context.getResource("/images/logo.jpg").getPath();
如果您最终想要的是一个InputStream
,您可能打算使用new FileInputStream(path)
创建它,那么您应该使用getResourceAsStream()
方法:
-
从classpath:
InputStream content= classLoader.getResourceAsStream("/images/logo.jpg");
-
或webcontent:
InputStream content = context.getResourceAsStream("/images/logo.jpg");
而不是/images/logo.jpg
put images/logo.jpg
即删除第一个斜线。
- Protobuf RPC在Hadoop 2.2.0单节点服务器上不可用?
- Bean属性不可读或具有无效的getter方法
- 如何解决’java.lang.OutOfMemoryError:超出GC开销限制’
- 通过java在MySql中存储字符串数组?
- 如何将Maven 2嵌入到我的应用程序中?
- 为什么hibernate给出了ConstraintException,就好像在已经存在的情况下尝试创建对象一样
- API中的奇怪语法“String :: concat”
- Java,Base64:如何使用Decorator Pattern编写Base64OutputStream类
- 超出范围时,ExecutorService是否会收集垃圾?