ResourceBundle getbundle 读路径资源

类 java.util.ResourceBundle

java.lang.Object   |   +----java.util.ResourceBundle

public abstract class ResourceBundle
extends Object
下列类的父类:
ListResourceBundle, PropertyResourceBundle

资源束包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时,如 String,程序可以从适合当前用户语言环境的资源束中装入它。以这种方式,可以写大部分独立于用户语言环境的程序代码,它与大部分资源束中的特定于语言环境的信息相隔离。

这使得编程可以:

一个资源束从概念上讲是相关的类集合,这些类是从 ResourceBundle 继承而来的。ResourceBundle的每个相关的子类有同一基名并加上标识它的语言环境的附加成分。例如,假设您的资源束命名为MyResources。您写的第一个类可能是缺省的资源束,它与它的家族有同一个名字--MyResources。也可按需要提供许多特定于语言环境的类:例如,可能为它提供一个德文的名字MyResources_de

ResourceBundle 的每个相关的子类包含同样的项目,但是项目已经为那个ResourceBundle子类描述的语言环境所翻译。例如,MyResourcesMyResources_de 可能都有一个用在确认操作按钮上的 String 。在MyResources 中,String 可能包含 OK,在 MyResources_de 中,它可能包含 Gut

如果对不同的国家有不同的资源,可做出规定:例如, MyResources_de_CH 是Switzerland 的资源。如--果仅想更改规定中的一些资源,可以这样做。

当您的程序需要特定于语言环境的对象时,它使用 getBundle 方法装入ResourceBundle 类:

 ResourceBundle myResources =      ResourceBundle.getBundle("MyResources", currentLocale); 
第一个参数指定包含有疑问对象的资源束的家族名。第二个参数指定了期望的语言环境。getBundle使用这两个参数来构造 ResourceBundle 子类的名字,它应按下面的方法装入。

资源束用不同的后缀查找类,根据(1) 期望的语言环境和 (2) 缺省的语言环境(基类),以下面从更低级别(指定较多的)到父类级别(指定较少的)的顺序来查找:

baseclass + "_" + language1 + "_" + country1 + "_" +variant1
ResourceBundle getbundle 读路径资源
baseclass + "_" + language1 + "_" + country1
baseclass + "_" + language1
baseclass
baseclass + "_" + language2 + "_" + country2 + "_" + variant2
baseclass + "_" + language2 + "_" + country2
baseclass + "_" + language2

查找的结果是一个类,但是那个类可能由磁盘上的特性文件支持。如果查找失败,getBundle() 抛出MissingResourceException 异常。

基类必须完全合格(例如,myPackage.MyResources, 而不仅仅是MyResources)。 它必须是您的代码可执行的;它不能是对调用ResourceBundle.getBundle 的包私有的类。

注意:ResourceBundle 被内部用于访问NumberFormats、Collation 等。查找策略是相同的。

资源束包含键/值对。键用于唯一地识别资源束中特定于语言环境的对象。下面是一个包含键/值对的ListResourceBundle 的例子:

 class MyResource extends ListResourceBundle {  public Object[][] getContents() {      return contents;      }  static final Object[][] contents = {  // LOCALIZE THIS              {"OkKey", "OK"},              {"CancelKey", "Cancel"},  // END OF MATERIAL TO LOCALIZE      }; } 
键总是 String。 在这个例子中,键是 OkKeyCancelKey。 在上面的例子中,值也是String--OKCancel--但是它们不是一定如此。值可以是任何类型的对象。

使用适当的获取方法从资源束中获取一个对象。因为 OkKeyCancelKey 都是字符串,可用 getString 方法检索它们:

 button1 = new Button(myResourceBundle.getString("OkKey")); button2 = new Button(myResourceBundle.getString("CancelKey")); 
获取方法都要求把键作为一个参数,并且如果找到的话就返回这个对象。如果对象未找到,获取方法抛出MissingResourceException 异常。

除了 getString,资源束支持获取不同类型对象的其它方法,例如getStringArray。如果没有任何对象匹配这些方法,可以使用getObject,并把结果映射成适当的类型。例如:

 int[] myIntegers = (int[]) myResources.getObject("intList"); 

注意:应该一直提供没有后缀的基类。 如果要求的语言环境不存在,这将是类的"最后选择"。例如,下面一个类 MyResources。它碰巧包含 US 字符串,所以我们不必用显式的MyResource_enMyResource_en_US

JDK 提供了 ResourceBundle 的两个子类:ListResourceBundlePropertyResourceBundle , 它们提供了非常简单的创建资源的方法。(一旦序列化完全被集成,将提供另一个方法。) 如在先前的例子中所见到的,ListResourceBundle把它的资源作为键/值对管理。 PropertyResourceBundle使用特性文件管理它的资源。

如果 ListResourceBundlePropertyResourceBundle 不符合您的需求,您可写自己的ResourceBundle子类。您写的子类必须覆盖两个方法:handleGetObjectgetKeys()

下面是 ResourceBundle 子类管理少数资源的例子(对于更大的资源,应使用Hashtable)。注意,如果未找到键,handleGetObject 必须返回null。注意,如果一个“父类级别的”ResourceBundle 处理有同一值( 见下面的 uk )的同一键,您不必提供任何值。

例子:

 abstract class MyResources extends ResourceBundle {     public Object handleGetObject(String key) {         if (key.equals("okKey")) return "Ok";         if (key.equals("cancelKey")) return "Cancel";           return null;     } } abstract class MyResources_de extends MyResources {     public Object handleGetObject(String key) {         if (key.equals("okKey")) return "Gut";         if (key.equals("cancelKey")) return "Vernichten";         return null;     } } abstract class MyResources_uk extends MyResources {     public Object handleGetObject(String key) {         // don't need okKey, since parent level handles it.         if (key.equals("cancelKey")) return "Dispose";           return null;     } } 
不必限制自己使用单个系列的ResourceBundle。例如,可以有一个用于出错信息的束集合,ExceptionResources(ExceptionResources_fr,ExceptionResources_de, ...) , 以及一个用于小工具的束集合,WidgetResource (WidgetResources_fr,WidgetResources_de, ...); 按您的需要断开资源。
参见:
ListResourceBundle, PropertyResourceBundle, MissingResourceException

变量索引

parent
当父类束不包含特定资源时,可通过 getObject 查阅它。

构造子索引

ResourceBundle()

方法索引

getBundle(String)
获取恰当的资源束子类。
getBundle(String, Locale)
获取恰当的资源束子类。
getKeys()
返回键的枚举。
getObject(String)
从资源束获取一个对象。
getString(String)
从资源束获取一个对象。
getStringArray(String)
从资源束获取一个对象。
handleGetObject(String)
从资源束获取一个对象。
setParent(ResourceBundle)
设置该束的父类束。

变量

parent
 protected ResourceBundle parent
当父类束不包含特定的资源时,可通过 getObject 查阅它。

构造子

ResourceBundle
 public ResourceBundle()

方法

getString
 public final String getString(String key) throws MissingResourceException
从资源束获取一个对象。
保存映射的便捷方法。
参数:
key - 参见类描述。
getStringArray
 public final String[] getStringArray(String key) throws MissingResourceException
从资源束获取一个对象。
保存映射的便捷方法。
参数:
key - 参见类描述。
getObject
 public final Object getObject(String key) throws MissingResourceException
从资源束获取一个对象。
参数:
key - 参见类描述。
getBundle
 public static final ResourceBundle getBundle(String baseName) throws MissingResourceException
获取适当的资源束子类。
参数:
baseName - 参见类描述。
getBundle
 public static final ResourceBundle getBundle(String baseName,                                              Locale locale)
获取适当的资源束子类。
参数:
baseName - 参见类描述。
locale - 参见类描述。
setParent
 protected void setParent(ResourceBundle parent)
设置该束的父类束。当父类束不包含特定的资源时,可通过 getObject 搜索它。
参数:
parent - 该束的父类束。
handleGetObject
 protected abstract Object handleGetObject(String key) throws MissingResourceException
从资源束获取一个对象。 注意:子类必须覆盖。
参数:
key - 参见类描述。
getKeys
 public abstract Enumeration getKeys()
返回键的枚举。 注意:子类必须覆盖。

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/315721.html

更多阅读

与理想有关----读完杜拉拉升职记大结局有感 杜拉拉升职记 电影

简单的说下,看完杜拉拉升职记的感觉。买了杜拉拉系列三本书,差第三部,已经打算去当当上看下,然后购入。第一,第二部是08年的时候看的了,至今书在朋友那,不能像以前一样,偶尔拿出来重温下。但里面的情节倒是还记得很清楚。很喜欢杜拉拉的总

声明:《ResourceBundle getbundle 读路径资源》为网友青竹暖回阳分享!如侵犯到您的合法权益请联系我们删除