2015-06-23 59 views
1

我正在努力獲取我已放置在Web根文件夾中的fileroot目錄的相對路徑。我試圖從一個類訪問這個目錄,通過Web Service返回文件名。該文件夾包含圖像和XML文件。應用程序根目錄中的目錄的相對路徑 - Java Web應用程序

這裏是我的項目結構從爆炸.WAR文件中看到 -

MyProject的
- fileroot
- CSS
- ...
- WEB-INF
| --classes

當我在本地驅動器上使用硬編碼的絕對路徑來讀取目錄上的文件時,我能夠得到此工作。但是,我需要這個工作在絕對路徑不可能的Web服務器上。

我需要從我的課程中訪問此文件夾,以便能夠在XML上應用一些處理,同時能夠從網頁的文件夾提供圖像。

下面是讀取目錄編寫的代碼 -

package com.xyz.executor; 

import java.io.File; 
import java.io.FileFilter; 
import java.util.ArrayList; 

/** 
* 
* @author AJ 
*/ 
public class GetDirectories { 

    public String basePath = "/fileroot"; 
    public String directoryName; 

    public GetDirectories() { 
    } 

    public GetDirectories(String DirectoryName) { 
     this.directoryName = DirectoryName; 

     basePath = basePath + "/" + directoryName; 
    } 

    public ArrayList<String> read() { 
     ArrayList<String> DirectoryList = new ArrayList<>(); 

     try { 
      File f = new File(basePath); // current directory 

      FileFilter directoryFilter = new FileFilter() { 
       public boolean accept(File file) { 
        return file.isDirectory(); 
       } 
      }; 

      File[] files = f.listFiles(directoryFilter); 
      for (File file : files) { 
       if (file.isDirectory()) { 
        System.out.print("directory:"); 
        DirectoryList.add(file.getName()); 
       } else { 
        System.out.print("  file:"); 
       } 
       System.out.println(file.getName()); 
      } 
     } catch (Exception e) { 
      System.out.println("Exception occurred (GetDirectories) : " + e.toString()); 
      e.printStackTrace(); 
      System.out.println("**************************"); 
     } 
     return DirectoryList; 
    } 
} 

我得到一個null pointer exceptionf.listFiles(directoryFilter)回報null因爲其中我懷疑有與路徑的問題。

問題1,如何獲取類文件中的應用程序根路徑?
問題2,我是通過將目錄放在應用程序根目錄下來做正確的事情嗎?或者我應該把它放在驅動器的另一個位置?

P.S:我之前編寫了一個web應用程序,它讀取存儲在類路徑中的.properties文件,類似於this question。但是,對於批量數量的文件,這似乎不是一個好主意

+0

您是否嘗試過的文件夾添加到類路徑?對於Web應用程序,所有相對可訪問的文件都從Web應用程序上下文的根目錄開始。 – MadConan

+0

你嘗試過context.getRealPath()嗎? – Ouney

+0

http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String) - 但你必須實現一個'Servlet',並將這些信息傳遞給你的類作爲參數。即它不能從POJO內部訪問。 –

回答

2

在應用程序服務器上,默認路徑是服務器啓動的路徑(即您啓動服務器時所在的文件夾)或bin文件夾。所以目錄和文件應該在裏面。一個快速的方法來檢查你正在打印或記錄f.getAbsolutePath()的結果,這將告訴你服務器默認的文件夾。

您正在打開文件(new File(...))而不是作爲資源,因此不使用資源路徑或類路徑。

在處理應用程序服務器時,最好避免使用默認路徑,因爲它很容易改變。要麼有一個系統屬性或等價物來定義文件將被搜索的位置,或者如果要將文件與應用程序一起傳送,請將其放入WAR中並將其作爲資源打開:

YourClass.class.getResourceAsStream("/..."); 

YourClass.class.getResource("/..."); 
+0

我使用'Servlet'解決了我的問題,然後使用'ServletContext'獲取了資源的URL。我將在編輯中發佈我的代碼 –

相關問題