我在一个应用程序上工作,其中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。
答案 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访问它。