如何获取图像绝对路径?

问题描述:

如何在java中获取图像路径?我想在jsp中显示图像,我想给路径像“/images/logo.jpg”,但它执行页面时得到空指针异常。如何获取图像绝对路径?

如果我给完整路径,它就像“d:/project/images/logo.jsp”一样工作。如何以绝对路径显示图像?

+1

如果你使用 “图像/ logo.jpg”,所以是相对路径? – Fosco 2010-07-08 15:55:52

+0

你是指相对路径?尝试省略第一个斜杠,看看是否有效。 (编辑:Fosco:jinx!) – 2010-07-08 15:56:44

而不是/images/logo.jpgimages/logo.jpg即删除第一个斜杠。

+0

Image image = Image.getInstance(“images/logo.jpg”); 使用itext的pdf生成代码。 – Rose 2010-07-08 16:10:27

+0

然后你必须做一些像 URL imgURL = getClass()。getResource(“images/logo.jpg”); Image img = new ImageIcon(imgURL).getImage(); – 2010-07-08 16:30:25

尽量避免在java.io内使用相对路径。任何相对路径都是相对于当前工作目录而言的,这个目录取决于你如何启动应用程序的方式,并且不能从代码中控制。当例如开始时,一个Tomcat服务,它将相对于c:/path/to/tomcat/bin。在Eclipse中运行时,它将相对于c:/path/to/eclipse/project/bin。在命令控制台中运行时,它将相对于当前打开的文件夹。等等。你不想依赖那个。馊主意。

在JSP/Servlet的web应用的情况下,基本上有两种方式来获得绝对资源路径以可靠的方式使用相对路径:

  1. 运行时类路径(那里有所有的检索类和库):

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    String path = classLoader.getResource("/images/logo.jpg").getPath(); 
    
  2. web内容(那里有所有的JSP文件和检索文件夹都):

    ServletContext context = getServletContext(); // Inherited from HttpServlet. 
    String path = context.getResource("/images/logo.jpg").getPath(); 
    

如果你最终要的是一个InputStream出来的,你也许intented使用new FileInputStream(path)创造,那么你就应该使用getResourceAsStream()方法代替:

  1. 从类路径:

    InputStream content= classLoader.getResourceAsStream("/images/logo.jpg"); 
    
  2. 或者web内容:

    InputStream content = context.getResourceAsStream("/images/logo.jpg"); 
    
+0

最后!我一直在寻找这个答案近4个小时..!根本没有人谈论过“ClassLoeader”或“ServletContext”。谢谢! – 2013-11-01 16:35:19