我使用以下命令获取此特定文件的URL,但它返回null。有没有人对问题或其他方法有任何建议?
URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");
答案 0 :(得分:42)
对于那些使用 Intellij Idea 的人:检查设置 - >编译器 - >资源模式。
该设置包含应解释为资源的所有扩展名。如果扩展不符合此处的任何模式,则class.getResource将使用此扩展为资源返回null。
答案 1 :(得分:29)
路径相对于类路径根目录,如果不提供绝对路径,则它与您正在使用的类(在本例中为ExchangeInterceptor
)查找相同的包。要在根目录中查找内容,请使用/GeoIP.dat
。
答案 2 :(得分:17)
使用班级“getResource
ClassLoader
方法
URL url = ExchangeInterceptor.class.getClassLoader().getResource("GeoIP.dat");
答案 3 :(得分:9)
我通过在IDEA上指出resource root
解决了这个问题。
最初目录是如此,图标是普通文件夹图标
<强>之前强>
目录上的 Right click
(或只是项目名称) - &gt; Mark directory As
- &gt; Resource Root
。
<强>后强>
重新编译&amp;高兴:P
答案 4 :(得分:4)
不,这是正确的方式。确保资源位于类路径中。这通常是导致这些类型问题的原因。
答案 5 :(得分:4)
如果您正在使用Gradle和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
答案 6 :(得分:3)
以防有人仍然有问题要理解:
.getResource()授予您访问本地bin文件夹的权限。这意味着,您的资源需要位于YourProject / bin / package /中。根文件夹是YourProject / bin /,可以通过在String参数中添加前缀/来实现,就像iirekm所说的那样。
答案 7 :(得分:3)
在使用IntelliJ时,我将项目生成为JavaFX应用程序,然后为其添加了maven框架支持。事实证明,然后我将资源放在src/main/resources
中,并且必须在代码中使用它们的每个资源名称后面添加./
。
同样如前一个答案中所述,仅通过classLoader加载资源。
所以对我来说,最后的网址加载是使用:
完成的 URL url = getClass().getClassLoader().getResource(String.format(".%ssample.fxml", File.separatorChar));
File.separatorChar
在* nix上返回/
,在窗口上返回\
。
答案 8 :(得分:2)
我遇到过类似的问题。来自getResource(String name)的 Java SE API :
如果名称以'/'('\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。
所以我在我的目录'/'
之前添加了MyClass.class.getResource("/dir_name/")
。
在您的情况下,尝试在文件名前添加'/'
:
URL url = ExchangeInterceptor.class.getResource("/GeoIP.dat");
答案 9 :(得分:1)
该文件需要在类路径中,例如: -
箱/我/包/ GeoIP.dat
/前缀似乎是谎言。以下是可行的。
URL url = ExchangeInterceptor.class.getResource("my/package/GeoIP.dat");
我怀疑问题是你没有在类路径中使用该文件。
答案 10 :(得分:1)
你把这个GeoIP.dat放在哪里?在与ExchangeInterceptor相同的包中,或在“root”包中。如果在同一个包中,你的代码是正常的,如果在根目录中 - 添加'/'前缀。
也许你正在使用M2Eclipse?如果配置不正确,也可能导致此类问题。导致此类问题的另一个原因可能是:配置错误的类加载器,错误配置的OSGi,......
答案 11 :(得分:1)
我可以通过在文件的开头添加“ ./”来解决此问题:
getClass().getClassLoader().getResource("./file.txt")
答案 12 :(得分:0)
不要将资源文件与源文件放在同一文件夹中,而是创建一个与resources
源文件夹平行的java
文件夹。
之前:
之后:
答案 13 :(得分:0)
这是我的示例解决方案。为我工作。
项目结构:
• Source Packages
• game
• Game.java
• game.images
• tas_right.png
在游戏课中:
URL path=this.getClass().getClassLoader().getResource("images/tas_right.png")
答案 14 :(得分:0)
答案 15 :(得分:-2)
首先,您需要确保在正确的路径上访问正确的文件。您可以通过getClass()。getResource(“GeoIP.dat”)。getAbsolutePath()来验证。
其次,路径说明符区分大小写,因此请确保您的文件未命名为“geoIP.dat”或“GeoIP.DAT”。
答案 16 :(得分:-2)
我意识到在 #dev 中使用 new File(location) 工作得很好,并且还可以访问 /project 文件夹之外的文件
答案 17 :(得分:-3)
在 eclipse 的情况下。
只是一个提示。你的代码可能是正确的,但你的jre配置没有。我遇到了同样的错误,没有任何帮助,直到我检查了日食设置。
确保您正确设置执行环境。
Preferences -> Java -> Installed JREs -> use "jdk..." as compatible JRE