at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:805)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:576)
可以参考如下方法:
You know java is looking for a properties file in a specific locale. You may be baffled why java keeps complaining it can't find a properties file that is right there. A few things to keep in mind when debugging this type of errors:ResourceBundle.getBundle("config")
tells the classloader to load a resource named "config"
with default package (that is, no package). It does NOT mean a resource in the current package that has the referencing class.ResourceBundle.getBundle("com.cheng.scrap.config")
tells the classloader to load a resource named "config"
with package "com.cheng.scrap."
Its fully-qualified-resource-name is "com.cheng.scrap.config"
For instance, you have a project like
C:/ws/netbeans5/scrap>
| build.xml
+---build
| /---classes
| /---com
| /---cheng
| /---scrap
| Scrap.class
|
+---src
| /---com
| /---cheng
| /---scrap
| config.properties
| Scrap.java
For this statement in Scrap.java: ResourceBundle config = ResourceBundle.getBundle("config");
to work, you will need to cp src/com/cheng/scrap/config.properties build/classes/
such that config.properties
is directly under classes
, and at the same level as com
. Alternatively, you can put config.properties
into a config.jar
such that config.properties
is at the root of config.jar
without any subdirectories, and include config.jar
in the classpath.
For this statement in Scrap.java: ResourceBundle config = ResourceBundle.getBundle("com.cheng.scrap.config");
to work, you will need to cp src/com/cheng/scrap/config.properties build/classes/
com/cheng/scrap/
such that config.properties
is directly under classes
/
com/cheng/scrap/
, and at the same level as scrap
. Alternatively, you can put com/cheng/scrap/
config.properties
(along with the long subdirectories) into a config.jar
, and include
config.jar
in the classpath.
You may be wondering why it is made so confusing? The benefits are two-fold, as I see it:
ResourceBundle.getBundle(String arg0)中的参数arg0必须包含属性文件的完整路径。
[参考:http://hi.baidu.com/mircoteam/blog/item/a2a0dc3e6b4bf0f8828b139e.html]
三、属性文件的路径
正如上述所说的,属性文件和读取的文件要放在一起,如果要分开这两个文件呢?上面第一点有提到:
These resource properties files are loaded by classloader......,那么我们自己可以自己建立一个目录,将属性文件放到其下,再将该目录设置为classloader加载的目录(加入类路径中)则可,如下
:
1、在项目下建一文件夹,路径随意,名字任意(这为:properties)。
2、(Eclipse中)选择项目->
Properties->java Build Path->Libraries->Add Class Folder,将properties文件加入类路径即可(或者手动在.classpath文件中加入:<classpathentry kind="lib" path="properties"/>)。ResourceBundle.getBundle("config");则可读取properties/config.properties文件的内容。
[参考:http://verran.javaeye.com/blog/44357]