viernes, 15 de agosto de 2008

Leer un archivo properties desde un proyecto web + JSF

Hola en este post voy a mostrar como se debe hacer para leer un archivo *.properties de java, puesto dentro de un proyecto web JSF, es interesante mencionar que la forma de llamar a estos archivos difiere un poco de como se lo hace comúnmente en un proyecto swing de escritorio común y corriente,  ya que en este solo se pone el path relativo desde el pack del proyecto y ya, pero en un proyecto web no funciona así, por eso he decidido mostrarlo a continuación, esta es la forma que descubrí para hacerlo y me funcionó, pero si existe una forma mejor o más optima de realizarlo res ruego comentarlo para así aprender todos algo más.


Dentro de nuestro proyecto web se nos crean comunmente las páginas jsp, y su contraparte en código java dentro de un paquete en la carpeta Source Packages, dentro de ese paquete vamos a colocar el archivo .properties, teniendo en cuenta que este se va a llamar igual que la clase que lo va a leer, (por ejemplo: En mi paquete tengo una clase llamada Reportes.java, dentro del mismo paquete pondré un archivo de propiedades llamado reportes.properties), el código para ller este archivo quedaria así:



[sourcecode language='java']
String nombrePROP = Reportes.class.getSimpleName().toLowerCase() + ".properties";
Properties props = new Properties();
props.load(Reportes.class.getResourceAsStream(nombrePROP));
String strPathOrigen = props.getProperty("pathORI");
String strPathXLS = props.getProperty("pathXLS");
[/sourcecode]


Con esto ya podriamos leer las propiesades que se tenga dentro de nuestro archivo properties.


Ahora para poder poner las propiedades sacadas del archivos en variables globales, tendremos que hacer lo siguiente, fuera de cualquier método y dentro de la clase vamos a poner esto, como un método más.



[sourcecode language='java']
private static String strPathOrigen;
private static String strPathXLS;

static {
try {
String nombrePROP = Reportes.class.getSimpleName().toLowerCase() + ".properties";
Properties props = new Properties();
props.load(Reportes.class.getResourceAsStream(nombrePROP));
strPathOrigen = props.getProperty("pathORI");
strPathXLS = props.getProperty("pathXLS");
} catch (IOException ex) {
Logger.getLogger(Reportes.class.getName()).log(Level.SEVERE, null, ex);
}
}
[/sourcecode]

Así todo lo que se saque del archivo properties se almacenará globalmente y se podrá usar dentro de toda la clase si es necesario.


Espero que les haya servido...


Saludos christmo...

No hay comentarios: