¡El rol específico y el uso de la clase Propiedades en la programación Java!
Si no está familiarizado con la clase java.util.Properties, se utiliza para almacenar pares clave-valor en un archivo, donde la clave y el valor están separados por un signo igual. (Como se muestra en el Listado 1). La clase java.util.Properties recientemente actualizada proporciona ahora una forma más sencilla de cargar y almacenar configuraciones para programas: los métodos loadFromXML(InputStreamis) y storeToXML(OutputStream os, String comment).
La siguiente es una explicación detallada, espero que pueda ser de ayuda para todos.
Listado 1. Ejemplo de un conjunto de propiedades
foo=bar
fu=baz
Después de cargar el Listado 1 en Propiedades objeto, puedes encontrar dos claves (foo y fu) y dos valores (barra de foo y baz de fu). Esta clase admite cadenas Unicode incrustadas con \u, pero lo importante aquí es que cada elemento se trata como una Cadena.
El Listado 2 muestra cómo cargar un archivo de propiedades y enumerar su conjunto actual de claves y valores. Simplemente pase el InputStream del archivo al método load() y cada par clave-valor se agregará a la instancia de Propiedades. Luego use list() para enumerar todas las propiedades o getProperty() para obtener propiedades individuales.
Listado 2. Cargando propiedades
import java.util.*;
import java.io.*
clase pública LoadSample; {
public static void main(String args[]) lanza una excepción {
Propiedades prop = new Properties();
FileInputStream fis =
new FileInputStream("sample.properties");
prop.load(fis);
prop.list(System.out);
System.out.println("\nLa propiedad foo: "
prop.getProperty("foo"));
}
}
La ejecución del programa LoadSample produce el resultado que se muestra en el Listado 3. Tenga en cuenta que el orden de los pares clave-valor en la salida del método list() no es el mismo que su orden en el archivo de entrada. La clase Propiedades almacena un conjunto de pares clave-valor en una tabla hash (en realidad, una subclase Hashtable), por lo que el orden no está garantizado.
Listado 3. Salida de LoadSample
-- propiedades del listado --
fu=baz
foo=bar
La propiedad foo: bar
Archivo de propiedades XML
Nada nuevo aquí. La clase Propiedades siempre funciona así. Sin embargo, lo nuevo es cargar un conjunto de propiedades desde un archivo XML. Su DTD se muestra en el Listado 4.
Listado 4. DTD del atributo
lt;?xml version="1.0" encoding="UTF-8"?gt;
lt;!-- DTD para propiedades --gt;
lt;!Propiedades ELEMENT (¿comentario?, entrada*) gt;
lt;!ATTLIST propiedades versión CDATA #FIXED "1.0"gt;
lt;!ELEMENT comentario (#PCDATA) gt;
lt;!ELEMENT entrada (#PCDATA) gt;
lt;!ATTLIST clave de entrada CDATA # REQUIREDgt;
Si no desea leer detenidamente el DTD XML, déjeme decirle que en realidad significa que envuelto en la etiqueta
Listado 5. Versión XML del archivo de propiedades
lt;?xml version="1.0" encoding="UTF-8"?gt;
lt; !DOCTYPE propiedades SISTEMA " /dtd/properties.dtd"gt;
lt;propertiesgt;
lt;commentgt;Hilt;/commentgt;
lt; clave de entrada="foo"gt;barlt;/entrygt;
lt;entry key="fu"gt;bazlt;/entrygt;
lt;/propertiesgt;
Como se muestra en el Listado 6, leer la versión XML del archivo de Propiedades no es diferente a leer el archivo en el formato anterior.
Listado 6. Lectura del archivo de propiedades XML
import java.util.*;
import java.io.*;
public clase LoadSampleXML {
public static void main(String args[]) lanza una excepción {
Propiedades prop = new Properties();
FileInputStream fis =< / p>
new FileInputStream("sampleprops.xml");
prop.loadFromXML(fis);
prop.list(System.out);
System.out.println("\nLa propiedad foo: "
prop.getProperty("foo"));
}
}< / p>
Una nota sobre el enlace de recursos
Si bien la clase java.util.Properties ahora admite archivos de propiedades como archivos XML además de pares clave-valor, desafortunadamente, no existe una opción incorporada ResourceBundle se puede procesar como un archivo XML. Sí, PropertyResourceBundle no usa objetos Propiedades para cargar enlaces, pero el uso del método de carga está codificado en la clase en lugar de usar el método loadFromXML() más nuevo.
La ejecución del programa del Listado 6 produce el mismo resultado que el programa original, como se muestra en el Listado 2.
Guardar atributos XML
Las nuevas Propiedades también tienen la función de almacenar atributos en un archivo de formato XML. Aunque el método store() todavía crea un archivo similar al que se muestra en el Listado 1, ahora puede usar el nuevo método storeToXML() para crear un archivo como el que se muestra en el Listado 5. Simplemente pase un OutputStream y un String para la anotación. El Listado 7 muestra el nuevo método storeToXML().
Listado 7. Almacenamiento de propiedades como archivo XML
import java.util.*;
import java.io.*;
clase pública StoreXML {
public static void main(String args[]) lanza una excepción {
Propiedades prop = new Properties();
prop.setProperty ( "uno-dos", "abróchame el zapato");
prop.setProperty("tres-cuatro", "cierra la puerta");
prop.setProperty(" cinco -seis", "recoger palos");
prop.setProperty("siete-ocho", "enderezarlos");
prop.setProperty("nueve-diez ", "una gallina grande y gorda");
FileOutputStream fos =
new FileOutputStream("rhyme.xml");
prop.storeToXML( fos , "Rhyme");
fos.close();
}
}
Ejecute el programa del Listado 7 para generar El resultado de se muestra en el Listado 8.
Listado 8. Archivo XML almacenado
lt;?xml version="1.0" encoding="UTF-8"?gt;
lt DOCTYPE;! propiedades SISTEMA "/dtd/properties.dtd"gt;
lt;propertiesgt;
lt;commentgt;Rhymelt;/commentgt;
lt;tecla de entrada ="seven-eight"gt;póngalos derechoslt;/entrygt;
lt;entry key="cinco-seis"gt;recoja los paloslt;/entrygt;
lt ; Entry key="nine-ten"gt;una gallina grande y gordalt;/entrygt;
lt;entry key="tres-cuatro"gt;cierra la puertalt;/entrygt;
lt;entry key="one-two"gt;abrócheme el zapato;/entrygt;
lt;/propertiesgt;
Un ejemplo cambiado aquí:
p >importar java.io.FileInputStream;
importar java.io.IOException;
importar java.io.InputStream;
importar java util. .Properties;
/**
* Implementar lectura de archivos de propiedades
* @author haoxuewu
*/ p>
Prueba de clase pública {
public static void main(String[] args) {
prueba {
inicio largo = System.currentTimeMillis( );
InputStream es = new FileInputStream("conf.properties");
Propiedades p = new Properties();
p.load(is) ;
is.close();
System.out.println("TAMAÑO: " p.size());
System.out.println (" página de inicio: " p.getProperty("página de inicio"));
System.out.println("autor: " p.getProperty("autor"));
System .out .println("escuela: " p.getProperty("escuela"));
long end = System.currentTimeMillis();
System.out.println("Costo: " (fin - inicio));
} captura (IOException ioe) {
} captura (IOException ioe) {
p>
ioe.printStackTrace();
}
}
}
conf.properties
# Archivo de configuración
página de inicio = /haoxuewu
autor = bbflyerwww
escuela = jilinjianzhugongchengxueyuan
Resultado
TAMAÑO: 3
página de inicio: /haoxuewu
autor: bbflyerwww
escuela: jilinjianzhugongchengxueyuan