2011-09-16 54 views
0

我需要創建目錄並在servlet中讀取目錄。在tomcat中創建和讀取目錄

如果我想在我的webapps/appName目錄中創建一個文件夾,我該如何做到這一點?

目前,如果我做的:

File file = new File("conf\Conf.xml"); 

這將調查目錄 「{TOMCAT_HOME} \ BIN \」

如何指向我的默認目錄爲「{TOMCAT_HOME} \的webapps \ APPNAME 「

回答

0

爲什麼你會這樣做的問題....最便攜的方法是將<init-param>添加到您的servlet並以這種方式傳遞路徑。

也可以使用System.getenv()獲取TOMCAT_HOME環境變量,假設它已被設置。

0

你只需要從servlet上下文獲得真正的路徑,它會給你正在尋找的路徑,做一些這樣的事情,這段代碼將創建以當前日期爲名稱的目錄。如果您希望避免servlet啓動延遲,請創建一個線程並將目錄創建委託給該線程。您可以像這樣將目錄路徑保存到servlet上下文。

private static final String DIR_SERVLET_CTX_ATTRIB = "directoryPathAttrib"; 
public void init() throws ServletException { 
    StringBuilder filePathBuilder = new StringBuilder(getServletContext().getRealPath("/").toString()); 
    filePathBuilder.append(File.separator); 
    filePathBuilder.append(new SimpleDateFormat("MM-dd-yyyy").format(new Date())); 
    System.out.println("Directory path: "+ filePathBuilder.toString()); 
     File file = new File(filePathBuilder.toString()); 
     if(!file.exists()) 
     { 
      file.mkdir(); 
      System.out.println("finished creating direcotry"); 
     } 
    getServletContext().setAttribute(DIR_SERVLET_CTX_ATTRIB, filePathBuilder.toString()); 
} 

protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, java.io.IOException 
{ 
    String dirPath = (String)getServletContext().getAttribute(DIR_SERVLET_CTX_ATTRIB); 
    File file = new File(dirPath + File.separator + "test.txt"); 
    FileOutputStream fis = new FileOutputStream(file); 
    fis.write("Hello".getBytes()); 
    fis.flush(); 
} 
+0

我已經做了這樣的事情,因爲這些文件的使用與該部署有關,如果文件的使用與綁定沒有關係,那麼我會建議不要這樣做。 –

1

如果我想在我的webapps/APPNAME目錄下創建一個文件夾,我應該做些什麼來實現這一目標?

沒有。你應該忘記這種方法,並尋找替代方法。無論何時重新部署WAR,甚至無論何時重新啓動服務器,在webapp文件夾結構中進行的所有更改都將不可逆轉地丟失。

您需要準備一個具有讀/寫權限的固定文件夾,並將其絕對磁盤文件系統路徑設置爲配置設置(properties/xml文件)或VM參數。例如,/var/webapp/uploads。這樣你就可以用通常的方式使用File

String root = getRootSomehow(); // Must return "/var/webapp/uploads". 
File file = new File(root, "somefile.txt"); 
// ... 

一個完全不同的選擇是使用數據庫。如果您將Web應用程序部署到不允許您在Web應用程序上下文之外創建文件夾的主機,這將是唯一的選擇。