我正在尝试使用文件描述符在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
答案 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");
// ...