2010-07-08 260 views
1

如何在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

回答

1

而不是/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

4

儘量避免在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