我使用以下内容来获取此特定文件的URL,但它返回null.有没有人对问题或其他方法有任何建议吗?
URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");
Run Code Online (Sandbox Code Playgroud)
ygg*_*raa 48
对于那些使用Intellij Idea的人:检查设置 - >编译器 - >资源模式.
该设置包含应解释为资源的所有扩展.如果扩展不符合此处的任何模式,则class.getResource将使用此扩展为资源返回null.
Mar*_*ten 31
该路径是相对于类路径根的,如果您不提供绝对路径,它将查找与您正在使用的类相同的包(在本例中ExchangeInterceptor).在root用户中查找内容/GeoIP.dat.
Win*_*ins 19
使用getResource类的方法'ClassLoader
URL url = ExchangeInterceptor.class.getClassLoader().getResource("GeoIP.dat");
Run Code Online (Sandbox Code Playgroud)
我通过指出resource rootIDEA 解决了这个问题.
最初目录是这样的,图标是普通文件夹图标
之前
Right click在目录(或只是项目名称) - > Mark directory As- > Resource Root.
后
重新编译并高兴:P
我遇到过类似的问题。从Java SE API for getResource?(String name):
如果名称以“/”(“\u002f”)开头,则资源的绝对名称是“/”后面的名称部分。
所以我'/'在我的目录之前添加了 : MyClass.class.getResource("/dir_name/")。
在您的情况下,尝试'/'在您的文件名之前添加:
URL url = ExchangeInterceptor.class.getResource("/GeoIP.dat");
如果您正在使用 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
小智 5
以防万一有人仍然有问题要理解:
.getResource() 授予您访问本地 bin 文件夹的权限。这意味着,您的资源需要位于 YourProject/bin/package/ 中。根文件夹是 YourProject/bin/ 并且可以通过将前缀 / 添加到 String 参数来访问,就像 iirekm 说的那样。
在使用 IntelliJ 时,我将项目生成为 JavaFX 应用程序,然后为其添加了 Maven 框架支持。事实证明,然后我将我的资源放入其中,src/main/resources并且必须./在代码中使用它们时添加每个资源名称。
同样如之前的答案所述,仅通过 classLoader 加载资源才有效。
所以对我来说,最终的 URL 加载是使用以下方法完成的:
URL url = getClass().getClassLoader().getResource(String.format(".%ssample.fxml", File.separatorChar));
*nix 和windows上的File.separatorChar回报。/\
| 归档时间: |
|
| 查看次数: |
71636 次 |
| 最近记录: |