如何在webapp中读取文件而不将其放在Tomcat的/ bin文件夹中

时间:2012-12-03 17:45:22

标签: tomcat servlets file-io

我正在尝试使用文件描述符在doGet方法上从Tomcat容器中读取文件。 执行时程序在tomcat bin文件夹下查找“sample.txt”。我不希望我的资源文件成为Tomcat bin的一部分。我如何以更好的方法读取文件,这使我可以灵活地定义我的资源目录。我也试图从Tomcat中部署为辅助类的POJO中读取文件。 我还可以在tomcat中配置classpath来查找不同目录下的文件吗? 任何指针都会有很大的帮助。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.print("Sample Text");
    RSAPublicCertificate rsa = new RSAPublicCertificate();
    out.print(rsa.getCertificate());
    File file = new File("sample.txt");
    out.print(file.getAbsolutePath());
    FileInputStream in = new FileInputStream(file);

}

D:\apache-tomcat-6.0.20\bin\sample.txt

1 个答案:

答案 0 :(得分:1)

您确实应该避免将new File()new FileInputStream()与相对路径一起使用。有关背景信息,另请参阅getResourceAsStream() vs FileInputStream

只需使用像

这样的绝对路径
File file = new File("/absolute/path/to/sample.txt");
// ...

或将给定路径作为shared.loader

/conf/catalina.propeties属性添加到类路径中
shared.loader = /absolute/path/to

这样你就可以从类路径中获取它,如下所示

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("sample.txt");
// ...