【问题标题】:How to get resource bundle file from a directory in java?如何从java中的目录获取资源包文件?
【发布时间】:2013-11-26 16:55:20
【问题描述】:

我有一个国际化应用程序的代码。我需要加载捆绑文件,从运行位置返回两次并加载它。

我的代码是,

bundle = ResourceBundle.getBundle("../../resources/basic",new Locale("fr", "CA"));
lblUsername.setText(bundle.getString("username"));
lblPassword.setText(bundle.getString("password"));
btnLogin.setText(bundle.getString("login"));

我收到以下错误。

java.util.MissingResourceException: Can't find bundle for base name ../../resources/basic, locale fr_CA
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at com.daycare.ui.user.Login$4.itemStateChanged(Login.java:248)
at javax.swing.JComboBox.fireItemStateChanged(Unknown Source)
at javax.swing.JComboBox.selectedItemChanged(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.JComboBox.setSelectedItem(Unknown Source)
at javax.swing.JComboBox.setSelectedIndex(Unknown Source)
at com.daycare.ui.user.Login.<init>(Login.java:372)
at com.daycare.ui.user.Login$1.run(Login.java:104)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

如何给出正确的 budle 文件路径?

提前致谢!

【问题讨论】:

  • 你的包是否存在于指定位置,你的资源包的名称是什么
  • basic_fr_CA.properties 是否存在于指定位置
  • 是的。文件名是基本的。这是一个属性文件
  • 请使用术语。 ResourceBundles 位于 包中, 即 JAR 文件中的文件夹中;不是目录。这可能有助于为您澄清事情。

标签: java internationalization


【解决方案1】:

据我所知,Bundle 类默认会在当前ClassLoader 上查找以查找您的资源。如果您想查看文件系统上的文件,请改用它:

File file = new File("the path of the folder containing the bundles");
URL[] urls = new URL[]{file.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
ResourceBundle rb = ResourceBundle.getBundle("the bundle name", your_locale, loader);

【讨论】:

  • 我收到了这个错误。 java.util.MissingResourceException:找不到基本名称基本的捆绑包,语言环境 en_US
  • 您可以尝试使用捆绑目录的绝对路径,而不是您帖子中描述的相对路径。
  • 您确定您的文件名为 basic_en_US.properties
  • 是的。当然。这是 basic_en_US
  • 它必须以 .properties 结尾
【解决方案2】:
ResourceBundle.getBundle("../../resources/basic",new Locale("fr", "CA")); 

将第一个参数更改为完全限定的类名并确保 basic_fr_CA.properties 存在。

例如 如果您的文件位于

/resource/basic_fr_CA.properties location, 

然后将你的java代码更改为

ResourceBundle.getBundle("resources.basic",new Locale("fr", "CA"));

【讨论】:

  • 如果您的文件位于 /resource/basic_fr_CA.properties 位置,则将您的 java 代码更改为 ResourceBundle.getBundle("resources.basic",new Locale("fr", "CA"));
  • 我做到了。但同样的错误。 java.util.MissingResourceException:找不到基本名称基本的包,区域设置 fr_CA
  • 是您在类路径中的资源文件夹。此外,如果资源包与类位于同一目录中,请删除所有路径信息。
  • 是的。我的资源文件夹包含 basic.properties、basic_en_US.properties、basic_fr_CA.properties 文件和一个名为 MainLogo 的 jpg 图像。就是这样
  • 检查拼写错误资源和资源文件夹是否不同
【解决方案3】:

如果你的资源在resources文件夹中,你可以这样使用,这样你就不用处理checked exception了:

ClassLoader loader = new URLClassLoader(new URL[]{ I18NManager.class.getResource("path to folder containing bundles you want to load")});
ResourceBundle rb = ResourceBundle.getBundle("the bundle name", locale);

其中I18NManager 表示正在加载资源的类。

如果I18NManager.class 不在静态上下文中,则可以将其替换为getClass()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2010-11-13
    • 2022-11-25
    • 2019-03-02
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多