对ClassLoader.getResourceAsStream()或Class.getResourceAsStream()进行故障排除

时间:2013-12-13 19:36:43

标签: java dynamic file-io classloader

我在一个应用程序上工作,其中war具有如下目录结构:

ear/war/modules/configuration/gsrc/<java packages start here>

但是,我想动态读取住在这里的文件:

/ear/war/modules/configuration/some/other/dir/somefile.csv

我尝试了许多常规ClassLoader.getResourceAsStream()和Class.getResourceAsStream()的排列,试图获得该资源的句柄,所有这些都是null,如:

ClassLoader.getResourceAsStream("/modules/configuration/some/other/dir/somefile.csv")
ClassLoader.getResourceAsStream("/configuration/some/other/dir/somefile.csv")
ClassLoader.getResourceAsStream("/some/other/dir/somefile.csv")
Class.getResourceAsStream("../some/other/dir/somefile.csv")
Class.getResourceAsStream("../../some/other/dir/somefile.csv")
Class.getResourceAsStream("../../../some/other/dir/somefile.csv")

我的假设是我正在使用一个类加载器,它的根作用域是代码所在的gsrc目录。解决这个问题的适当方法是什么?

例如,我希望我能打印出像ClassLoader.rootDirectory()这样的东西来弄清楚类加载器的根目录是什么。然后我可以打印出这个类加载器的根目录和它的父代等等。

运行时在本地是jetty,但在所有其他区域中都是websphere。

2 个答案:

答案 0 :(得分:0)

我的Eclipse项目具有以下结构:

C:\工作空间\项目名\ SRC \ COM \我\包\资源\ myfile.properties

所以,要实际加载这个文件,我正在这样做:

getClass().getResourceAsStream("/com/my/package/resources/myfile.properties")

我希望这个例子可以帮助你。

答案 1 :(得分:0)

将文件放入WEB-INF并使用

从servlet访问它
getServletContext().getResourceAsStream("/WEB-INF/somefile.csv");

或将其放在文件系统的任何位置,并使用Java File API或Apache commons-io访问它。