gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:14:57 24 4
gpt4 key购买 nike

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

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

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

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

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

有什么线索吗?

最佳答案

我认为发生这种情况是因为您有“.” (当前文件夹)在类路径上。那是 a) 一个坏主意和 b) 让你的应用以奇怪的方式崩溃。

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

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

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

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

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

关于java - Thread.currentThread().getContextClassLoader().getResourceAsStream() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21020350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com