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

Rat*_*tha 2 java windows-services classpath

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

InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(FilePath);
Run Code Online (Sandbox Code Playgroud)

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

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

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

这有什么线索吗?

Aar*_*lla 9

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

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

您应该使用FileFileReader访问它们.

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

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

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