ResourceBundle

这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现本地化。比如对于“取消”,中文中我们使用“取消”来表示,而英文中我们使用“cancel”。若我们的程序是面向国际的(这也是软件发展的一个趋势),那么使用的人群必然是多语言环境的,实现国际化就非常有必要。而ResourceBundle可以帮助我们轻松完成这个任务:当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包(大多数情况下也就是.properties文件)中加载它。这样可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(即便不是全部)特定于语言环境的信息隔离

案例

新建资源文件。资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

my_en_US.properties:cancelKey=cancelmy_zh_CN.properties:cancelKey=\u53D6\u6D88(取消)my_zh.properties:cancelKey=\u53D6\u6D88zh(取消zh)my.properties:cancelKey=\u53D6\u6D88default(取消default)

ResourceBundle resourceBundle = ResourceBundle.getBundle("my",Locale.getDefault());String cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my", new Locale("zh", "CN"));cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my", Locale.US);cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my", Locale.GERMAN);cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my");for (String key : resourceBundle.keySet()) {System.out.println(resourceBundle.getString(key));}//前面三个分别按照zh_CN,US,默认的结果输出,// 第四个由于我们未定义GERMAN属性文件,这时ResourceBundle为我们提供了一个fallback(也就是一个备用方案),// 这个备用方案就是根据当前系统的语言环境来得到的本地化信息。// 所以若是找不到GERMAN的,之后就会去找CHINA了,所以找到了res_zh_CN.properties这个资源包。// 最后一个是若有多个属性文件,可以按照Map的形式遍历,获得属性文件内的各个值。

参考:JAVA中ResourceBundle使用详解_OovEver的博客-CSDN博客_resourcebundle

ListResourceBundle

ListResourceBundle是ResourceBundle的一个抽象子类,它使用List来管理区域设置的资源

案例

1.创建资源类,继承ListResourceBundle,重写getContents()方法

在src根目录下,即default包下面下创建三个文件,MyResource.java、MyResource_zh_CN.java、MyResource_en_US.java,必须在根目录下,不然加载不到。

public class MyResource extends   ListResourceBundle {Object[][] data = new Object[][]{{"cancel", "取消default"}};@Overrideprotected Object[][] getContents() {return data;}
}
public class MyResource_zh_CN extends ListResourceBundle {Object[][] data = new Object[][]{{"cancel", "取消"}};@Overrideprotected Object[][] getContents() {return data;}
}
public class MyResource_en_US extends ListResourceBundle {Object[][] data = new Object[][]{{"cancel", "cancel"}};@Overrideprotected Object[][] getContents() {return data;}
}

 2.测试

public class MyResourceTest {public static void main(String[] args) {// 没有Local.GERMAN对应的区域配置文件,会根据当前系统的区域设置(Local.CHINA)来加载配置文件,// 由于没有Resource_zh_CN的配置文件,所以会加载默认的配置文件MyResource// MyResource里 cancel = 取消defaultResourceBundle bundle = ResourceBundle.getBundle("MyResource", Locale.GERMAN);String cancel = bundle.getString("cancel");System.out.println(cancel);// 增加 Resource_zh_CN的配置,再次运行,发现输出内容为Resource_zh_CN里的内容 cancel = 取消}
}

PropertyResourceBundle

PropertyResourceBundle是ResourceBundle的一个子类。

当我们通过.properties文件定义资源时,ResourceBundle.getBundle()创建的就是PropertyResourceBundle实例,来加载Properties文件获取属性值的。

Properties

Properties类表示一组持久的属性。属性可以保存到流中,也可以从流中加载。

属性列表中的每个键及其对应的值都是一个字符串。

案例

加载resource目录下的my.properties文件,读取文件中的属性

public class PropertiesTest {public static void main(String[] args) throws IOException {// 加载资源文件Properties properties = new Properties();InputStream stream = PropertiesTest.class.getClassLoader().getResourceAsStream("my.properties");properties.load(stream);System.out.println(properties);// getProperty(key)方法如果没有找到属性key,则返回nullString cancel = properties.getProperty("key");System.out.println(cancel);// getProperty(key,defaultValue)如果没有找到属性key,则返回defaultValueString property = properties.getProperty("key", "value");System.out.println(property);// 获取所有属性名Enumeration<?> propertyNames = properties.propertyNames();while (propertyNames.hasMoreElements()) {Object key = propertyNames.nextElement();System.out.println("属性名:" + key);}Set<String> strings = properties.stringPropertyNames();for (String keyName : strings) {System.out.println("属性名:" + keyName);}// 打印属性和属性值,通常用于调试PrintStream printStream = System.out;properties.list(printStream);}
}

ResourceBundle相关推荐

  1. java.util.ResourceBundle使用详解

    为什么80%的码农都做不了架构师?>>>      2009-07-29 00:47:17     一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序 ...

  2. 使用ResourceBundle加载properties文件

    使用ResourceBundle加载properties文件 @(JAVA)[java] 1.ResourceBundle介绍 说的简单点,这个类的作用就是读取资源属性文件(properties),然 ...

  3. ResourceBundle的路径问题

    來源:http://www.diybl.com/course/3_program/java/javajs/200862/119502.html System.out.println(System.ge ...

  4. java resourcebundle_Java - Properties和ResourceBundle类学习

    一.前言 在项目的开发过程中,为了统一配置的管理,我们经常需要将一些配置信息根据环境的不同,配置在不同的properties中,然后从里面进行读取.而Properties类作为最基础也是最经常使用的类 ...

  5. java bundle_java.util.ResourceBundle国际化用法详解

    初识国际化和ResourceBundle 这个类主要用来解决国际化和本地化问题.国际化和本地化可不是两个概念,两者都是一起出现的.可以说,国际化的目的就是为了实现本地化,详细的介绍可以看本文的最后.比 ...

  6. Java ResourceBundle keySet()方法及示例

    ResourceBundle类keySet()方法 (ResourceBundle Class keySet() method) keySet() method is available in jav ...

  7. java国际化bundle_Java国际化(i18n)ResourceBundle类

    ResourceBundle类用于存储区域设置敏感的文本和对象. 通常使用属性文件来存储特定于语言环境的文本,然后使用ResourceBundle对象来表示它们. 以下是在基于Java的应用程序中使用 ...

  8. Java ResourceBundle getLocale()方法与示例

    ResourceBundle类的getLocale()方法 (ResourceBundle Class getLocale() method) getLocale() method is availa ...

  9. java方法参数Bundle,Java ResourceBundle keySet()方法及示例

    ResourceBundle类keySet()方法keySet()方法在java.util包中可用. keySet()方法用于从此ResourceBundle及其超级捆绑包中获取所有现有键,以在Set ...

  10. java.util.ResourceBundle用法

    src目录下建三个文件分别为my.properties,my_en_US.properties,my_zh_CN.properties 下面的方法直接在main方法中运行 //获取src目录下my.p ...

最新文章

  1. elasticsearch _field_stats 源码分析
  2. Mac 完全卸载 Java
  3. mysql 时间取日期函数_mysql 获取当前日期函数及时间格式化参数详解
  4. java 工作 日期转换代码,判断是否是当天,然后日期转换
  5. 漫游Kafka实现篇之分布式
  6. python面向对象类_python:面向对象(类)
  7. c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5
  8. java实现复原IP地址,回溯算法:复原IP地址
  9. 实验报告格计算机,计算机实验报告格式大全
  10. anaconda的python环境下无法使用通过pip安装的python库
  11. Spring - Configuration Metadata
  12. 对华为HG255D路由器进行JTAG调试的进一步研究
  13. ppt流程图箭头分叉_箭头循环图ppt模板_PPT结构图制作中箭头跟着目标走的技巧_ppt箭头流程图模板_ppt箭头循环图...
  14. 如何打造百万爆款短视频?普通人如何通过短视频赚钱?3分钟学会
  15. 社会工程学与APT攻击之——社工防御方法
  16. 使用JS实现前端缓存
  17. java Font 自定义字体
  18. Linux云计算架构师课程(兄弟连IT教育)
  19. C语言 带参数宏定义中 # 和 ## 知识点总结、代码分析
  20. java接口设计规范_关于团队API接口规范设计

热门文章

  1. SpringBoot项目多环境配置(亲测有效)
  2. linux 下spi的使用 ,cc2500模块驱动
  3. PHP打出来的数字和成语,php批量将词语 成语 导入数据库
  4. 大众点评爬虫(Python)
  5. f分布表完整图a=0.01_R语言具有Student-t分布改进的GARCH(1,1)模型的贝叶斯估计...
  6. 性能测试流程(完整版)
  7. 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-9825】-【V6.0 Android-Q-TG1】...
  8. Excel·VBA数组组合函数、组合求和
  9. 数据清洗以及常用的方法
  10. Linux 使用yum下载软件