我的应用程序中有以下代码块;
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(FilePath);
这里'FilePath'是文件的绝对路径。
当我在正常模式下运行应用程序时,上面的代码在linux和windows中运行良好。(即:在命令提示符下) 但是,当我将应用程序作为Windows服务运行时,这不起作用。我将输入流设为'null'。
之前有人遇到过这样的问题吗?除了java类加载器之外,我找不到任何关于此的信息。这里我们使用“ContextClassLoader”,它是正确使用的类加载器..
有什么线索吗?
答案 0 :(得分:9)
我认为这是因为你有“。”类路径上的(当前文件夹)。这是一个坏主意,b)让你的应用以奇怪的方式突破。
您需要了解的是文件和资源之间的区别。文件是类路径之外的东西。
您应该使用File
和FileReader
来访问它们。
资源是类路径上的东西。资源路径始终使用/
作为文件分隔符,而不是File.separator
。
解决此问题的另一种方法是将$HOME/repository/
(Linux)或%HOME%/repository/
添加到类路径并使用"resources/api_templates/api.xml"
加载资源。为此,resources
必须是$HOME/repository/
中的文件夹。
如果不这样做,那么主目录中的所有文件(或您启动应用程序的任何目录)都将作为资源添加到类路径中。