Java中使用资源包储存和访问在应用程序中要使用到的本地特定资源对象。
一个本地特定资源的最简单例子就是字符串对象。举例来说,在下面的应用程序中,要求输出不同的消息,而这些消息取决于在命令行中的本地指定。我们用静态的方法来创建一个资源包的实例:
java.util.ResourceBundle.getBundle():
ResourceBundle messages = ResourceBundle.getBundle("messages", Locale.ENGLISH);
其中getBundle()方法有三种方式来让你选择一个特定的locale和classloader,或者你可选择默认项来选择默认的locale和classloarder。
正如你在前面看到的那段代码,得到一个资源包的实例并没有什么实际价值。因为例子代码locale使用英语表示的,所以在执行上面这个方法的时候,ResourceBundle 就会从应用程序的classpath中寻找名为“messages_en.properties”的文件。如果没有找到此文件,那么就会出现java.util.MissingResourceException这样一个错误提示。
在实际的应用程序中,你可以根据用户设定或是系统设定来选择你的locale。下面是一个根据启动时的设定来选择locale的例子:
Locale locale = Locale.ENGLISH;
if ( args.length != 0 ) {
locale = new Locale(args[0]);
}
ResourceBundle messages = ResourceBundle.getBundle("messages", locale);
在有了资源包的实例后,就可以调用一种get方式来获得你想要的本地资源。
ResourceBundle类型定义了获得字符串、字符串数组和获得对象的方法。在这个例子中,一个字符串形式的“welcome.message”将被触发:
String message = messages.getString("welcome.message");
当调用getString()函数的时候,ResourceBundle就从先前得到的工具文件中寻找有关键字名“welcome.message”的字符串对象。如果没有找到关键字,那么就会出现java.util.MissingResourceException错误提示。
其中用到的道具文件就如下面这种形式:
messages_en.properties:
welcome.message=Welcome to fantastic application and thanks for choosing
Acme, Inc.
messages_de.properties
welcome.message=Heißen Sie willkommen zu phantastischer Anwendung und Dank zum
Wählen von Gipfel, Inc.
messages_fr.properties:
welcome.message=Bienvenu a l'application fantastique et remercie pour choisir
de Point Culminant, Inc.
(请注意,上面的内容是我们用自动翻译工具翻译成法语和德语的。)
除了字符串以外,你还可以对其他对象使用资源包。例如,你可以创建你自己的独立于道具文件的资源包实例。不管你是需要储存本地特定字符串还是需要处理其他更复杂的对象,资源包都能为你提供很好的选择。
import java.util.Locale;
import java.util.ResourceBundle;
public class ResourceBundleTip {
public static void main(String[] args) {
Locale locale = Locale.ENGLISH;
if ( args.length != 0 ) {
locale = new Locale(args[0]);
}
ResourceBundle messages = ResourceBundle.getBundle("messages", locale);
String message = messages.getString("welcome.message");
System.out.println(message);
}
}