我正在使用以下来获取此特定文件的URL,但它返回null。有没有人有任何关于这个问题的建议或另一种方式来做到这一点?Java - class.getResource返回null
URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");
我正在使用以下来获取此特定文件的URL,但它返回null。有没有人有任何关于这个问题的建议或另一种方式来做到这一点?Java - class.getResource返回null
URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");
不,这是正确的方法afaik。确保资源在您的类路径中。这通常是这些类型问题的原因。
该路径是相对于classpath根目录的,如果你没有给出绝对路径,它将与你正在使用的类(在本例中为ExchangeInterceptor
)在同一个包中查找。要找到根中使用的东西,请使用/GeoIP.dat
。
你把这个GeoIP.dat放在哪里?在与ExchangeInterceptor相同的包中,或在“根”包中。如果在同一个包中,你的代码是OK的,如果在根目录下 - 添加'/'前缀。
也许您正在使用M2Eclipse?如果配置不正确,也可能导致此类问题。这样的问题的另一个原因可能是:错误配置的类加载器,配置错误的OSGi,...
万一有人仍然有问题,要明白:
.getResource()授予您访问本地bin文件夹。这意味着,您的资源需要位于YourProject/bin/package /中。根文件夹是YourProject/bin /,可以通过在字符串参数中添加前缀/来加以识别,就像iirekm所说的那样。
首先,您需要确保您在正确的路径上访问正确的文件。你可以通过getClass()。getResource(“GeoIP.dat”)。getAbsolutePath()来验证。
其次,路径说明符区分大小写,所以请确保您的文件未被命名为“geoIP.dat”或“GeoIP.DAT”。
你会得到NullRef,因为`getResource`返回`null`,请记住? – Schultz9999 2015-01-05 21:58:09
对于那些使用Intellij Idea:检查设置 - >编译器 - >资源模式。
该设置包含应解释为资源的所有扩展名。如果扩展不符合这里的任何模式,那么class.getResource将为使用此扩展的资源返回null。
我一直在使用IDEA超过10年,甚至从来不知道这个设置。谢谢! – 2014-01-21 17:28:35
的文件需要在类路径,例如: -
斌/我的/包/ GeoIP.dat
的/前缀似乎是一个谎言。以下将起作用。
URL url = ExchangeInterceptor.class.getResource("my/package/GeoIP.dat");
我怀疑问题是你没有在类路径中的文件。
使用类ClassLoader
URL url = ExchangeInterceptor.class.getClassLoader().getResource("GeoIP.dat");
的getResource
方法在蚀的情况下。
只是一个提示。你的代码可能是正确的,但你的jre配置不是。我遇到了同样的错误,没有任何帮助,直到我检查了日食设置。
请确保您正确设置了执行环境。
Preferences -> Java -> Installed JREs -> use "jdk..." as compatible JRE
虽然使用的是IntelliJ,我生成该项目作为一个JavaFX应用程序,然后添加Maven的框架支持它。事实证明,我将资源置于src/main/resources
,并且必须在代码中使用它们的每个资源名称后面添加./
。
也如前面的答案中所述,只有通过classLoader加载资源才起作用。
所以对我来说,最终的URL装载用做:
URL url = getClass().getClassLoader().getResource(String.format(".%ssample.fxml", File.separatorChar));
的File.separatorChar
回报/
在* nix和\
在Windows上。
如果您使用摇篮和IntelliJ,和改变Resource patterns
没有工作,和你的资源的根设置是否正确......你可以试试这个:
Settings > Build, Execution, Delpoyment > Build Tools > Gradle > Runner > Delegate IDE build/run actions to gradle
。 (IntelliJ 2017.3.3)
来源:https://youtrack.jetbrains.com/issue/IDEA-176738#comment=27-2518612
这真的是答案。其他一切只是有点荒谬。除了IntelliJ提示。 – Schultz9999 2015-01-05 21:57:30