NetBeans 中classpath没法找到资源文件

时间:2024-03-21 17:08:31

有个非常简单的需求,就是写一个Java类,并且实现读取properties资源文件。

  

加载资源的方式为使用了java.util.ResourceBundle 这个类。

  

为了测试方便,一开始把properties文件和Java文件放在了同一个目录下面。看下图:

  

  

NetBeans 中classpath没法找到资源文件

  

资源文件和类名完全一样。

  

  

接下来贴代码:

  

NetBeans 中classpath没法找到资源文件

  

  

  

  

直接把ResourceBundle对象定义为一个静态变量,在类被加载的时候就自动实例化。ResourceBundle 加载资源文件的方式比较特殊,看起来就像加载一个类一样。

  

上面这段代码报错了,说找不到这个资源文件。

  

DEBUG之后我怀疑是在类加载路劲中找不到这个properties文件。然后我就研究了下,发现NetBeansmaven项目中的Java代码编译和执行方式比较特殊,是通过调用maven插件的形式完成的。当然这个特性主要出现在最近的几个版本中。

  

然后我就去类编译后的路径中去查看,发现果然找不到资源文件(编译后文件在 target/classes 目录下),见下图:

  

NetBeans 中classpath没法找到资源文件

  

为了再确认一遍,再次写一段代码进行测试:

  

  

NetBeans 中classpath没法找到资源文件

  

  

发现,通过classloader去查找该文件的时候,没法找到,所有URL为NULL。基本上确认就是我猜测的问题。

  

  

因此,我就严格按照maven的约定,把资源文件放在resources目录中,同时包路径和代码的路径对应一致:

  

  

NetBeans 中classpath没法找到资源文件

  

  

再执行一遍,果然没问题,同时在编译的class文件中能够找到这个文件:

  

  

  

NetBeans 中classpath没法找到资源文件

  备注:每次有变动之后,重新执行自己的代码之前,为了防止出错,最好清空target目录