在tomcat中创建和读取目录

时间:2011-09-16 22:19:42

标签: tomcat servlets

我需要创建目录并在servlet中读取它们。

如果我想在webapps/appName目录中创建一个文件夹,我该怎么做呢?

目前如果我这样做:

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

这将查看目录“{TOMCAT_HOME} \ bin \”

如何将默认目录指向“{TOMCAT_HOME} \ webapps \ appName \”

3 个答案:

答案 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应用程序部署到不允许您在webapp上下文之外创建文件夹的主机,这将是唯一的选择。

答案 1 :(得分:0)

为什么要这样做的问题......最便携的方法是向你的servlet添加<init-param>并以这种方式传递路径。

您也可以使用System.getenv()获取TOMCAT_HOME环境变量,假设它已设置。

答案 2 :(得分: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();
}