找不到 ResourceBundle 文件,属性文件不在 jar 中
Posted
技术标签:
【中文标题】找不到 ResourceBundle 文件,属性文件不在 jar 中【英文标题】:ResourceBundle file not found, properties file not in jar 【发布时间】:2012-07-24 22:36:02 【问题描述】:关于资源包错误,我已经阅读了有关同一主题的其他问题,但我没有得到任何更明智的信息。尝试了不同的东西,没有帮助。提供一点背景知识:我开发了一个小应用程序(JDK6),它可以自动进行一些平面文件的解析和编辑。该应用程序首先从属性文件中读取一些数据。
重要: 我希望能够更改属性文件。我不想把它放在jar文件中。
但是,即使使用我尝试创建的小示例应用程序,基于另一个问题/答案 [此处][1]:
package restestapp;
import java.util.Locale;
import java.util.ResourceBundle;
public class ResourceBundleTester
public static void main(String[] args)
Locale locale = Locale.getDefault();
String basename ="myresource";
ResourceBundle resourceBundle = ResourceBundle.getBundle(basename, locale);
System.out.println(resourceBundle.getString("STARTING_MYAPP"));
两个文件都在这里:
/home/dakoina/Documents/ResTestapp/ResTestApp.jar
/home/dakoina/Documents/ResTestapp/myresource.properties
甚至
c:/temp/ResTestApp.jar
c:/temp/myresource.properties
但是当我运行它时,它给了我这个输出:
dakoina@ubuntu:~/Documents/ResTestapp$ java -cp /home/dakoina/Documents/ResTestapp/ -jar "ResTestApp.jar"
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name myresource, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1539)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1278)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:805)
at restestapp.ResTestApp.main(ResTestApp.java:19)
在 Windows 中,同样...
c:\temp>java -jar ResTestApp.jar
Exception in thread "main" java.util.MissingResourceException: Can't find bundle
for base name myresource, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at restestapp.ResTestApp.main(ResTestApp.java:19)
[1]: http://***.com/questions/3742158/using-resourcebundle-with-an-external-file-java
我看不出我错在哪里:/
【问题讨论】:
【参考方案1】:-jar
表示:从给定的 jar 和它在清单中引用的所有 jar 组成类路径。所以-cp
选项被忽略了。
你的命令行应该是:
java -cp /home/dakoina/Documents/ResTestapp;/home/dakoina/Documents/ResTestapp/ResTestApp.jar the.main.Class
也就是说,资源包用于加载国际化标签。如果您只想读取属性,最好使用java.util.Properties
类。
【讨论】:
'java -cp /home/dakoina/Documents/ResTestapp:/home/dakoina/Documents/ResTestapp/ResTestApp.jar ResTestApp.class' 似乎不起作用。找不到主类... 你的班级被命名为restestapp.ResourceBundleTester
。不是ResTestApp
。
哦,对不起,实际上我复制了原始代码并忘记更改我的新类名(ResTestApp)
我知道您可以使用 Properties 或 ResourceBundle。我相信使用属性而不是 ResourceBundle 不会提高效率或任何东西。我错了吗?
这不仅仅关乎效率(尽管属性会更快:ResourceBundle 在幕后使用属性)。只是Properties 用于从Properties 文件中读取Properties。 ResourceBundle 用于从一组属性文件和区域设置层次结构中读取国际化值。【参考方案2】:
myresource.properties
needs to be in classpath for jar file
将此属性文件放入jar并配置类路径(如链接中所述)
【讨论】:
java -classpath c:/temp/ -jar ResTestApp.jar 像这样?如果是这样,那是行不通的:/ 请参阅@JB 描述的命令,或将其包含在您的jar 文件中并设置类路径 抱歉,我无法将属性文件放入 jar 中 当然,供以后参考:)以上是关于找不到 ResourceBundle 文件,属性文件不在 jar 中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JAVA 中使用 ResourceBundle 将匈牙利字符作为属性文件中的键?
属性文件操作之Properties与ResourceBundle