GetResourceAsStream返回null,文件存在

时间:2016-03-29 15:38:09

标签: java apache tomcat

我知道有很多主题,但我似乎已经尝试了一切。我可以把我的文件名放在那里,如果有一个src文件夹,它会找到它,

InputStream is = context.class.getClassLoader().getResourceAsStream("file.props");

但是当我们把它放在apache服务器上时,不会自动创建一个src文件夹,所以它没有找到它。我已经尝试将它直接放在web-inf文件夹和

InputStream is = context.class.getClassLoader().getResourceAsStream("/WEB-INF" + File.separator + "file.props");

但是这总是返回null。这是什么原因?该文件存在于那里,为什么它找不到它?

2 个答案:

答案 0 :(得分:1)

您似乎使用了错误的ClassLoader。调用context.class.getClassLoader()可提供ClassLoader类(ServletContext)加载的context.class。你想要的是 web应用程序的类ClassLoader,它们是context.getClassLoader()

答案 1 :(得分:0)

如果要从/WEB-INF加载文件,请不要使用ClassLoader。相反,请将ServletContext方法用于此目的:

// In your servlet e.g. doGet method
ServletContext app = super.getServletContext();
InputStream in = app.getResourceAsStream("/WEB-INF/file.props");

请注意,无论操作系统,文件系统等是什么,都可以使用/

如果您真的想使用ClassLoader,请接受@ rickz的建议并将file.props移至WEB-INF/classes