📄 properties.java
字号:
element.length()); } else { c = line.charAt(pos++); switch (c) { case 'n': element.append('\n'); break; case 't': element.append('\t'); break; case 'r': element.append('\r'); break; case 'u': if (pos + 4 <= line.length()) { char uni = (char) Integer.parseInt (line.substring(pos, pos + 4), 16); element.append(uni); pos += 4; } // else throw exception? break; default: element.append(c); break; } } } else element.append(c); } put(key.toString(), element.toString()); } } /** * Calls <code>store(OutputStream out, String header)</code> and * ignores the IOException that may be thrown. * * @param out the stream to write to * @param header a description of the property list * @throws ClassCastException if this property contains any key or * value that are not strings * @deprecated use {@link #store(OutputStream, String)} instead */ public void save(OutputStream out, String header) { try { store(out, header); } catch (IOException ex) { } } /** * Writes the key/value pairs to the given output stream, in a format * suitable for <code>load</code>.<br> * * If header is not null, this method writes a comment containing * the header as first line to the stream. The next line (or first * line if header is null) contains a comment with the current date. * Afterwards the key/value pairs are written to the stream in the * following format.<br> * * Each line has the form <code>key = value</code>. Newlines, * Returns and tabs are written as <code>\n,\t,\r</code> resp. * The characters <code>\, !, #, =</code> and <code>:</code> are * preceeded by a backslash. Spaces are preceded with a backslash, * if and only if they are at the beginning of the key. Characters * that are not in the ascii range 33 to 127 are written in the * <code>\</code><code>u</code>xxxx Form.<br> * * Following the listing, the output stream is flushed but left open. * * @param out the output stream * @param header the header written in the first line, may be null * @throws ClassCastException if this property contains any key or * value that isn't a string * @throws IOException if writing to the stream fails * @throws NullPointerException if out is null * @since 1.2 */ public void store(OutputStream out, String header) throws IOException { // The spec says that the file must be encoded using ISO-8859-1. PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "ISO-8859-1")); if (header != null) writer.println("#" + header); writer.println ("#" + Calendar.getInstance ().getTime ()); Iterator iter = entrySet ().iterator (); int i = size (); StringBuffer s = new StringBuffer (); // Reuse the same buffer. while (--i >= 0) { Map.Entry entry = (Map.Entry) iter.next (); formatForOutput ((String) entry.getKey (), s, true); s.append ('='); formatForOutput ((String) entry.getValue (), s, false); writer.println (s); } writer.flush (); } /** * Gets the property with the specified key in this property list. * If the key is not found, the default property list is searched. * If the property is not found in the default, null is returned. * * @param key The key for this property * @return the value for the given key, or null if not found * @throws ClassCastException if this property contains any key or * value that isn't a string * @see #defaults * @see #setProperty(String, String) * @see #getProperty(String, String) */ public String getProperty(String key) { return getProperty(key, null); } /** * Gets the property with the specified key in this property list. If * the key is not found, the default property list is searched. If the * property is not found in the default, the specified defaultValue is * returned. * * @param key The key for this property * @param defaultValue A default value * @return The value for the given key * @throws ClassCastException if this property contains any key or * value that isn't a string * @see #defaults * @see #setProperty(String, String) */ public String getProperty(String key, String defaultValue) { Properties prop = this; // Eliminate tail recursion. do { String value = (String) prop.get(key); if (value != null) return value; prop = prop.defaults; } while (prop != null); return defaultValue; } /** * Returns an enumeration of all keys in this property list, including * the keys in the default property list. * * @return an Enumeration of all defined keys */ public Enumeration propertyNames() { // We make a new Set that holds all the keys, then return an enumeration // for that. This prevents modifications from ruining the enumeration, // as well as ignoring duplicates. Properties prop = this; Set s = new HashSet(); // Eliminate tail recursion. do { s.addAll(prop.keySet()); prop = prop.defaults; } while (prop != null); return Collections.enumeration(s); } /** * Prints the key/value pairs to the given print stream. This is * mainly useful for debugging purposes. * * @param out the print stream, where the key/value pairs are written to * @throws ClassCastException if this property contains a key or a * value that isn't a string * @see #list(PrintWriter) */ public void list(PrintStream out) { PrintWriter writer = new PrintWriter (out); list (writer); } /** * Prints the key/value pairs to the given print writer. This is * mainly useful for debugging purposes. * * @param out the print writer where the key/value pairs are written to * @throws ClassCastException if this property contains a key or a * value that isn't a string * @see #list(PrintStream) * @since 1.1 */ public void list(PrintWriter out) { out.println ("-- listing properties --"); Iterator iter = entrySet ().iterator (); int i = size (); while (--i >= 0) { Map.Entry entry = (Map.Entry) iter.next (); out.print ((String) entry.getKey () + "="); // JDK 1.3/1.4 restrict the printed value, but not the key, // to 40 characters, including the truncating ellipsis. String s = (String ) entry.getValue (); if (s != null && s.length () > 40) out.println (s.substring (0, 37) + "..."); else out.println (s); } out.flush (); } /** * Formats a key or value for output in a properties file. * See store for a description of the format. * * @param str the string to format * @param buffer the buffer to add it to * @param key true if all ' ' must be escaped for the key, false if only * leading spaces must be escaped for the value * @see #store(OutputStream, String) */ private void formatForOutput(String str, StringBuffer buffer, boolean key) { if (key) { buffer.setLength(0); buffer.ensureCapacity(str.length()); } else buffer.ensureCapacity(buffer.length() + str.length()); boolean head = true; int size = str.length(); for (int i = 0; i < size; i++) { char c = str.charAt(i); switch (c) { case '\n': buffer.append("\\n"); break; case '\r': buffer.append("\\r"); break; case '\t': buffer.append("\\t"); break; case ' ': buffer.append(head ? "\\ " : " "); break; case '\\': case '!': case '#': case '=': case ':': buffer.append('\\').append(c); break; default: if (c < ' ' || c > '~') { String hex = Integer.toHexString(c); buffer.append("\\u0000".substring(0, 6 - hex.length())); buffer.append(hex); } else buffer.append(c); } if (c != ' ') head = key; } }} // class Properties
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -