1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
/* * @(#)PropertyResourceBundle.java 1.32 06/06/20 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ /* * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved * * The original version of this source code and documentation * is copyrighted and owned by Taligent, Inc., a wholly-owned * subsidiary of IBM. These materials are provided under terms * of a License Agreement between Taligent and Sun. This technology * is protected by multiple US and International patents. * * This notice and attribution to Taligent may not be removed. * Taligent is a registered trademark of Taligent, Inc. */ package java.util; import java.io.InputStream; import java.io.Reader; import java.io.IOException; import sun.util.ResourceBundleEnumeration; /** * <code>PropertyResourceBundle</code> is a concrete subclass of * <code>ResourceBundle</code> that manages resources for a locale * using a set of static strings from a property file. See * {@link ResourceBundle ResourceBundle} for more information about resource * bundles. * * <p> * Unlike other types of resource bundle, you don't subclass * <code>PropertyResourceBundle</code>. Instead, you supply properties * files containing the resource data. <code>ResourceBundle.getBundle</code> * will automatically look for the appropriate properties file and create a * <code>PropertyResourceBundle</code> that refers to it. See * {@link ResourceBundle#getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) ResourceBundle.getBundle} * for a complete description of the search and instantiation strategy. * * <p> * The following <a name="sample">example</a> shows a member of a resource * bundle family with the base name "MyResources". * The text defines the bundle "MyResources_de", * the German member of the bundle family. * This member is based on <code>PropertyResourceBundle</code>, and the text * therefore is the content of the file "MyResources_de.properties" * (a related <a href="ListResourceBundle.html#sample">example</a> shows * how you can add bundles to this family that are implemented as subclasses * of <code>ListResourceBundle</code>). * The keys in this example are of the form "s1" etc. The actual * keys are entirely up to your choice, so long as they are the same as * the keys you use in your program to retrieve the objects from the bundle. * Keys are case-sensitive. * <blockquote> * <pre> * # MessageFormat pattern * s1=Die Platte \"{1}\" enthält {0}. * * # location of {0} in pattern * s2=1 * * # sample disk name * s3=Meine Platte * * # first ChoiceFormat choice * s4=keine Dateien * * # second ChoiceFormat choice * s5=eine Datei * * # third ChoiceFormat choice * s6={0,number} Dateien * * # sample date * s7=3. März 1996 * </pre> * </blockquote> * * <p> * <strong>Note:</strong> PropertyResourceBundle can be constructed either * from an InputStream or a Reader, which represents a property file. * Constructing a PropertyResourceBundle instance from an InputStream requires * that the input stream be encoded in ISO-8859-1. In that case, characters * that cannot be represented in ISO-8859-1 encoding must be represented by * <a href="http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.3">Unicode Escapes</a>, * whereas the other constructor which takes a Reader does not have that limitation. * * @see ResourceBundle * @see ListResourceBundle * @see Properties * @since JDK1.1 */ public class PropertyResourceBundle extends ResourceBundle { /** * Creates a property resource bundle from an {@link java.io.InputStream * InputStream}. The property file read with this constructor * must be encoded in ISO-8859-1. * * @param stream an InputStream that represents a property file * to read from. * @throws IOException if an I/O error occurs * @throws NullPointerException if <code>stream</code> is null */ public PropertyResourceBundle (InputStream stream) throws IOException { Properties properties = new Properties(); properties.load(stream); lookup = new HashMap(properties); } /** * Creates a property resource bundle from a {@link java.io.Reader * Reader}. Unlike the constructor * {@link #PropertyResourceBundle(java.io.InputStream) PropertyResourceBundle(InputStream)}, * there is no limitation as to the encoding of the input property file. * * @param reader a Reader that represents a property file to * read from. * @throws IOException if an I/O error occurs * @throws NullPointerException if <code>reader</code> is null * @since 1.6 */ public PropertyResourceBundle (Reader reader) throws IOException { Properties properties = new Properties(); properties.load(reader); lookup = new HashMap(properties); } // Implements java.util.ResourceBundle.handleGetObject; inherits javadoc specification. public Object handleGetObject(String key) { if (key == null) { throw new NullPointerException(); } return lookup.get(key); } /** * Returns an <code>Enumeration</code> of the keys contained in * this <code>ResourceBundle</code> and its parent bundles. * * @return an <code>Enumeration</code> of the keys contained in * this <code>ResourceBundle</code> and its parent bundles. * @see #keySet() */ public Enumeration<String> getKeys() { ResourceBundle parent = this.parent; return new ResourceBundleEnumeration(lookup.keySet(), (parent != null) ? parent.getKeys() : null); } /** * Returns a <code>Set</code> of the keys contained * <em>only</em> in this <code>ResourceBundle</code>. * * @return a <code>Set</code> of the keys contained only in this * <code>ResourceBundle</code> * @since 1.6 * @see #keySet() */ protected Set<String> handleKeySet() { return lookup.keySet(); } // ==================privates==================== private Map<String,Object> lookup; }