Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-class.getResource返回null_Java_Url - Fatal编程技术网

Java-class.getResource返回null

Java-class.getResource返回null,java,url,Java,Url,我使用下面的方法获取这个特定文件的URL,但它返回null。有没有人对这个问题有什么建议,或者有其他的解决方法 URL url = ExchangeInterceptor.class.getResource("GeoIP.dat"); 不,那是正确的方法。确保资源位于类路径上。这通常是这些类型问题的原因。路径是相对于类路径根的,如果您没有给出绝对路径,它将与您正在使用的类位于同一个包中(在本例中为ExchangeInterceptor)。要在根目录中查找内容,请使用/GeoIP.dat将此Ge

我使用下面的方法获取这个特定文件的URL,但它返回null。有没有人对这个问题有什么建议,或者有其他的解决方法

URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");

不,那是正确的方法。确保资源位于类路径上。这通常是这些类型问题的原因。

路径是相对于类路径根的,如果您没有给出绝对路径,它将与您正在使用的类位于同一个包中(在本例中为
ExchangeInterceptor
)。要在根目录中查找内容,请使用
/GeoIP.dat

将此GeoIP.dat放在何处?在与ExchangeInterceptor相同的包中,或在“根”包中。如果在同一个包中,如果在root-add“/”前缀中,则代码是OK的


也许你在用M2Eclipse?如果配置不正确,也可能导致此类问题。此类问题的另一个原因可能是:错误配置的类加载器,错误配置的OSGi,…

以防有人仍然无法理解:


.getResource()授予您访问本地bin文件夹的权限。这意味着,您的资源需要位于您的项目/bin/package/中。根文件夹是YourProject/bin/,可以通过在字符串参数中添加前缀/来访问,就像iirekm所说的那样。

首先,您需要确保在正确的路径上访问正确的文件。您可以通过getClass().getResource(“GeoIP.dat”).getAbsolutePath()验证这一点

其次,路径说明符区分大小写,因此请确保您的文件未命名为“geoIP.dat”或“geoIP.dat”。

对于使用Intellij Idea的人:检查设置>构建、执行、部署>编译器>资源模式


该设置包含应解释为资源的所有扩展。如果扩展名不符合此处的任何模式,则class.getResource将为使用此扩展名的资源返回null。

文件需要位于类路径中,例如:-

bin/my/package/GeoIP.dat

前缀似乎是个谎言。下面的方法可以奏效

URL url = ExchangeInterceptor.class.getResource("my/package/GeoIP.dat");

我怀疑问题在于类路径中没有该文件。

使用类的
ClassLoader
方法

URL url = ExchangeInterceptor.class.getClassLoader().getResource("GeoIP.dat");

如果发生日食

只是一个提示。您的代码可能是正确的,但您的jre配置不正确。在检查eclipse设置之前,我遇到了相同的错误,没有任何帮助

确保正确设置了执行环境

Preferences -> Java -> Installed JREs -> use "jdk..." as compatible JRE 

我通过指出IDEA上的
资源根
解决了这个问题

最初目录是这样的,图标是一个普通的文件夹图标

之前

在目录(或仅项目名称)上单击鼠标右键
)->
将目录标记为
->
资源根目录

之后


重新编译&ravele:p

在使用IntelliJ时,我将该项目生成为JavaFX应用程序,然后向其添加maven框架支持。结果是,我将我的资源放在
src/main/resources
中,并且在代码中使用它们时,必须在每个资源名称后面添加
/

同样如前面的回答中所述,只有通过类加载器加载资源才有效

因此,对我来说,最终的URL加载是通过以下方式完成的:

URL=getClass().getClassLoader().getResource(String.format(“.ssample.fxml”,File.separatorChar))


文件.separatorChar
在*nix上返回
/
,在windows上返回
\

如果您使用的是Gradle和IntelliJ,更改
资源模式
不起作用,您的资源根设置正确…您可以尝试以下操作:

Settings>Build、Execution、Delpoyment>buildtools>Gradle>Runner>将IDE构建/运行操作委托给Gradle
。(IntelliJ 2017.3.3)


来源:

我也遇到过类似的问题。从Java SE API获取:

如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分

因此,我在目录前面添加了
'/'
MyClass.class.getResource(“/dir\u name/”)

在您的情况下,请尝试在文件名之前添加
“/”


URL=ExchangeInterceptor.class.getResource(“/GeoIP.dat”)

不要将资源文件与源文件放在同一文件夹中,而是创建一个与
java
源文件夹平行的
resources
文件夹

之前:

  • src
    • 主要
      • 爪哇
        • MyClass.java
        • file.bin
        • file.txt
之后:

  • src
    • 主要
      • 爪哇
        • MyClass.java
      • 资源
        • file.bin
        • file.txt

    • 这是我的示例解决方案。为我工作

      项目结构:

      •   Source Packages
         •    game
             •    Game.java
         •    game.images
             •    tas_right.png
      
      在游戏类中:

      URL path=this.getClass().getClassLoader().getResource("images/tas_right.png")
      

      我可以通过在文件开头添加“/”来修复它,如下所示:

      getClass().getClassLoader().getResource("./file.txt")
      

      我使用Intellij版本Ultimate 2019.3

      转到

      设置->编译器->资源模式

      单击“确定”。 重新运行应用程序/服务器

      在我的例子中,我在项目中包括了jks


      我意识到使用新文件(位置)在#dev中可以很好地工作,也可以访问/project文件夹之外的文件

      它根本不指向特定的文件夹。它只是指向类路径。你应该反过来看:你所说的bin文件夹是运行时类路径的一部分。好吧,我也尝试过使用相同的方法,但得到了与原始海报相同的错误。我通过将文件添加到我提到的路径来修复它,所以我想我应该分享这个“发现”,您刚刚发现了类路径的一个路径。OP已经在类路径中了,OP只是在访问