如何在servlet中获取本地文件

时间:2014-08-11 04:51:39

标签: java tomcat servlets

我在本地安装了Tomcat服务器,并将文本文件放在我的C盘中(c:\ test \ myfile.txt)。

在我的servlet中,我指定了要读取它的文件的确切路径。我成功地做到了。

我的问题是,我应该在部署之前将txt文件放在哪里,如何导航到它来阅读? 我做了一个测试并在我当地的Tomcat上运行

System.out.println("Working Directory = " +
              System.getProperty("user.dir"));

它向我展示了Eclipse文件夹!也许是因为我通过eclipse运行tomcat。所以我确信有一个特定的数据文件夹,或者我应该在文件系统中创建一个但我需要相对路径。

感谢任何建议

2 个答案:

答案 0 :(得分:3)

这是你的选择。基本上有三种方式:

将它放在类路径中,以便您可以使用类路径相对路径ClassLoader#getResourceAsStream()加载它:

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));

这里filename.properties应该被放置在一个由webapp的默认类路径覆盖的根中,例如Webapp/WEB-INF/libWebapp/WEB-INF/classesAppserver/libJRE/lib。如果propertiesfile是特定于webapp的,最好将其放在WEB-INF/classes中。如果您正在IDE中开发项目,也可以将其放在src文件夹(项目的源文件夹)中。

您也可以将它放在默认类路径之外的某个位置,并将其路径添加到appserver的类路径中。例如,在Tomcat中,您可以将其配置为Tomcat/conf/catalina.properties的shared.loader属性。

2.。)将它放在web文件夹(项目的web内容文件夹)中的某个位置,以便您可以通过ServletContext#getResourceAsStream()使用webcontent-relative路径加载它:

Properties properties = new Properties();
properties.load(getServletContext().getResourceAsStream("/WEB-INF/filename.properties"));

请注意,我已经演示将文件放在/WEB-INF文件夹中,否则任何webbrowser都可以公开访问该文件。另请注意,ServletContext位于继承的HttpServlet只能访问的任何GenericServlet#getServletContext()类中。

3.。)将它放在本地磁盘文件系统中的某个位置,以便您可以使用绝对本地磁盘文件系统路径以通常的java.io方式加载它:

Properties properties = new Properties();
properties.load(new FileInputStream("/absolute/path/to/filename.properties");

这里有许多不同的方法,但这取决于您的需求:

要从$TOMCAT_HOME/conf directory加载属性文件,您需要使用java.io.File对象访问它,因为类加载器(如this.getClass().getClassLoader().getResourceAsStream(...)中只能加载文件(和类))从您的课程路径(WEB-INF/classesWEB-INF/lib$TOMCAT_HOME/lib下)。

Tomcat's config directory加载文件的最简单示例是:

File configDir = new File(System.getProperty("catalina.base"), "conf");
File configFile = new File(configDir, "myconfig.properties");
InputStream stream = new FileInputStream(configFile);
Properties props = new Properties();
props.load(stream);

答案 1 :(得分:1)

将您的配置文件放在您的webapp WEB-INF / classes文件夹下,并在代码

中读取
InputStream is= 
   YourClassName.class.getResourceAsStream("myfile.txt");

如果你想在JSP中使用,你也可以尝试这些其他选项。

String myfile=
  application.getRealPath("myfile.txt"));

or

String myfile =
  getServletContext().getRealPath("myfile.txt"));