properties.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 374 行

JAVA
374
字号
/* *    * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.util;import java.util.Vector;import java.util.Enumeration;/** * The <code>Properties</code> class represents a persistent set of * properties. Each key and its corresponding value in * the property list is a string. * <p> */public class Properties {    /** An appropriate initial size for storage vectors (10). */    private static int INITIAL_SIZE = 10;    /**     * The initial properties as series of key-value pairs. This array will be     * used until a property is added, set, or removed.     * <p>     * The Java installer adds properties, also when a system MIDlet is     * run with arguments, the arguments are added to properties.     * 99.99% of the time, when running a downloaded MIDlet properties are     * not added the is no need to load the vectors.     */    private String[] initProps;    /** A vector of property keys. */    private Vector keys;    /** A vector of property values. */    private Vector vals;        /**     * Constructor - creates an empty property list.     */    public Properties() {        keys = new Vector(INITIAL_SIZE);        vals = new Vector(INITIAL_SIZE);    }    /**     * Constructor - creates an populated property list.     *     * @param propertyStrings an array of Strings 2 per property, will be     * filled in with a pair pattern of key and value, this exact array     * will be used for property lookup (the array will not be changed).     * No other allocation will be done until the array is changed and at     * that time the initial property array will be released.     */    public Properties(String[] propertyStrings) {        initProps = propertyStrings;    }    /**     * Convert the init property String array to vectors for changing     * properties.     */    private void convertInitPropsToVectors() {        int numberOfProps;        numberOfProps = initProps.length / 2;        keys = new Vector(numberOfProps + INITIAL_SIZE);        vals = new Vector(numberOfProps + INITIAL_SIZE);        for (int i = 0; i < initProps.length; i += 2) {            keys.addElement(initProps[i]);            vals.addElement(initProps[i + 1]);        }        // The initial properties are no longer needed.        initProps = null;    }    /**     * Store multiple key:value pair.  Provided for parallelism with the      * <tt>getProperty</tt> method. Enforces use of strings for      * property keys and values.      *     * @param key the key to be placed into this property list.     * @param value the value corresponding to <tt>key</tt>.     * @see #getProperty     */    public synchronized void addProperty(String key,                                          String value) {        if (keys == null) {            convertInitPropsToVectors();        }    	keys.addElement(key);        vals.addElement(value);        return;    }    /**     * Store a single key:value pair.  Provided for parallelism with the      * <tt>getProperty</tt> method. Enforces use of strings for      * property keys and values.  If a key already exists in storage,     * the value corresponding to that key will be replaced and returned.     *     * @param key the key to be placed into this property list.     * @param value the value corresponding to <tt>key</tt>.     * @return if the new property value replaces an existing one, the old      * value is returned.  otherwise, null is returned.     * @see #getProperty     * @see #removeProperty     */    public synchronized String setProperty(String key, String value) {        int idx;        String rv = null;        if (keys == null) {            convertInitPropsToVectors();        }        idx = keys.indexOf(key);        if (idx == -1) {    // If I don't have this, add it and return null            keys.addElement(key);            vals.addElement(value);            } else {	    // Else replace it and return the old one.            rv = (String)vals.elementAt(idx);            vals.setElementAt(value, idx);        }        return rv;    }    /**     * Store a single key:value pair.      *      * This method is very similar to setproperty() except with a difference      * that the keys are stored in case-insensitive manner. This is needed in      * certain situations like HTTP header names.     *     *     * @param key the key to be placed into this property list.     * @param value the value corresponding to <tt>key</tt>.     * @return if the new property value replaces an existing one, the old      * value is returned.  otherwise, null is returned.     * @see #getProperty     * @see #removeProperty     */    public synchronized String setPropertyIgnoreCase(String key, String value) {        int idx = -1;        String rv = null;        if (keys == null) {            convertInitPropsToVectors();        }        for (int count = 0; count < keys.size(); count++) {            if (((String)keys.elementAt(count)).equalsIgnoreCase(key)) {                idx = count;            }        }        if (idx == -1) {    // If I don't have this, add it and return null            keys.addElement(key);            vals.addElement(value);            } else {	    // Else replace it and return the old one.            rv = (String)vals.elementAt(idx);            vals.setElementAt(value, idx);            /*             * Also replace the key at idx in case there is change in case             * for the key             */            keys.setElementAt(key, idx);        }        return rv;    }    /**     * Replace the value of the property at the given index.     *     * @param index 0 based index of a property     * @param value the new value for the property at <tt>index</tt>.     *     * @return previous value     *     * @exception IndexOutOfBoundsException if the index is out of bounds     */    public synchronized String setPropertyAt(int index, String value) {        String rv;        if (keys == null) {            convertInitPropsToVectors();        }        rv = (String)vals.elementAt(index);        vals.setElementAt(value, index);        return rv;    }    /**     * Searches for the property with the specified key in this property list.     * The method returns <code>null</code> if the property is not found.     *     * @param   key   the property key.     * @return  the value in this property list with the specified key value.     * @exception NullPointerException is thrown if key is <code>null</code>.     * @see     #setProperty     * @see     #removeProperty     */    public String getProperty(String key) {        String rv = null;        if (key == null) {            throw new NullPointerException();        }        if (keys == null) {            for (int i = 0; i < initProps.length; i += 2) {                if (initProps[i].equals(key)) {                    rv = initProps[i + 1];                    break;                }            }        } else {            int idx = keys.indexOf(key);            if (idx > -1) {                rv = (String)vals.elementAt(idx);            }        }    	return rv;    }    /**     * This method is very similar to getproperty() except with a difference      * that the keys are searched in case-insensitive manner. This is needed in      * certain situations like HTTP header names.     *     * @param   key   the property key.     * @return  the value in this property list with the specified key value.     * @exception NullPointerException is thrown if key is <code>null</code>.     * @see     #setProperty     * @see     #removeProperty     */    public String getPropertyIgnoreCase(String key) {        String rv = null;        if (key == null) {            throw new NullPointerException();        }        if (keys == null) {            for (int i = 0; i < initProps.length; i += 2) {                if (initProps[i].equalsIgnoreCase(key)) {                    rv = initProps[i + 1];                    break;                }            }        } else {            int idx = -1;            for (int count = 0; count < keys.size(); count++) {                if (((String)keys.elementAt(count)).equalsIgnoreCase(key)) {                    idx = count;                }            }            if (idx > -1) {                rv = (String)vals.elementAt(idx);            }        }    	return rv;    }            /**     * Gets a property value by index. Used by the JadWriter as part of the     * JAD Tool.     *     * @param index 0 based index of a property     * @return  the value of the property with the specified index.     * @exception ArrayIndexOutOfBoundsException     *     if an invalid index was given.     */    public String getValueAt(int index) {        if (keys == null) {            return initProps[(index * 2) + 1];        }        return (String)vals.elementAt(index);    }    /**     * Gets a property key by index. Used by the JadWriter as part of the     * JAD Tool.     *     * @param index 0 based index of a property     * @return  the key of the property with the specified index.     * @exception ArrayIndexOutOfBoundsException     *     if an invalid index was given.     */    public String getKeyAt(int index) {        if (keys == null) {            return initProps[index * 2];        }        return (String)keys.elementAt(index);    }    /**     * Gets the number of properties.     *     * @return  number of properties     */    public int size() {        if (keys == null) {            return initProps.length / 2;        }        return keys.size();    }    /**     * Removes a property (key:value pair) from the property     * list based on the key string.     *     * @param key the key to be removed from the property list.      * @return  the element associated with the key.     * @see #setProperty     * @see #getProperty     */    public synchronized String removeProperty(String key) {	int idx;	String rv = null;        if (keys == null) {            convertInitPropsToVectors();        }	idx = keys.indexOf(key);	if (idx > -1) {	    rv = (String)vals.elementAt(idx);	    keys.removeElementAt(idx);	    vals.removeElementAt(idx);	}	return rv;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?