Thread.currentThread()。getContextClassLoader()。getResourceAsStream()返回null

时间:2014-01-09 12:31:36

标签: java windows-services classpath

我的应用程序中有以下代码块;

InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(FilePath);

这里'FilePath'是文件的绝对路径。

当我在正常模式下运行应用程序时,上面的代码在linux和windows中运行良好。(即:在命令提示符下) 但是,当我将应用程序作为Windows服务运行时,这不起作用。我将输入流设为'null'。

之前有人遇到过这样的问题吗?除了java类加载器之外,我找不到任何关于此的信息。这里我们使用“ContextClassLoader”,它是正确使用的类加载器..

有什么线索吗?

1 个答案:

答案 0 :(得分:9)

我认为这是因为你有“。”类路径上的(当前文件夹)。这是一个坏主意,b)让你的应用以奇怪的方式突破。

您需要了解的是文件和资源之间的区别。文件是类路径之外的东西。

您应该使用FileFileReader来访问它们。

资源是类路径上的东西。资源路径始终使用/作为文件分隔符,而不是File.separator

解决此问题的另一种方法是将$HOME/repository/(Linux)或%HOME%/repository/添加到类路径并使用"resources/api_templates/api.xml"加载资源。为此,resources必须是$HOME/repository/中的文件夹。

如果不这样做,那么主目录中的所有文件(或您启动应用程序的任何目录)都将作为资源添加到类路径中。

相关问题