Por ejemplo, si tenemos que mostrar una serie de mensajes por pantalla. En lugar de embeber los mensajes dentro del código Java escribiremos dichos mensajes en un fichero .properties asociados cada uno a una clave. Si en un futuro queremos cambiar los mensajes, podemos simplemente cambiar el fichero de propiedades sin tener la necesidad de cambiar el código fuente y volver a compilar la clase donde estuvieran.
En primer lugar vamos a hablar de la localización de los ficheros de propiedades. Los ficheros de propiedades deben guardarse en los paquetes Java, junto a las clases. Aunque podemos crear un paquete específico para dicho fichero. Supongamos a partir de ahora que hemos creado el fichero de propiedades en el paquete:
- org.tutorialexception
- src/main/resources/org/tutorialexception
#Mensajes saludo=Hola sujeto=amigo
Pues bien, podemos cargar y utilizar el fichero de propiedades de la siguiente forma:
package org.tutorialexception; import java.io.IOException; import java.util.Properties; public class Main { public static void main(String[] args) { Properties info = new Properties(); try { info.load(Main.class.getResourceAsStream("/org/tutorialexception/mensajes.properties")); String saludo = info.getProperty("saludo"); String sujeto = info.getProperty("sujeto"); System.out.println(saludo + " " + sujeto); } catch (IOException ex) { System.out.println(ex); } } }
Esta clase debe guardarse en el mismo sitio que el fichero de propiedades. Si ejecutamos tenemos que obtener la siguiente salida:
Hola amigo
Si cambiamos los valores de 'saludo' y 'sujeto' por
#Mensajes saludo=Hi sujeto=friend
y volvemos a ejecutar (sin compilar) la clase Main veremos que el resultado cambia:
Hi friend
Nota 1: Puede verse que la llamada a getResourceAsStream se a hecho especificando la ruta completa del paquete empezando por '/' (ruta absoluta). Si consultamos la API del método podemos ver que si la ruta empieza por la barra ('/') la ruta se trata como absoluta y tenemos que poner todo el paquete. Si por el contrario no ponemos la barra, se trata como ruta relativa a partir de la clase. Por este motivo, puesto que el fichero de propiedades está situado en el mismo paquete que la clase Main, podríamos haber escrito:
info.load(Main.class .getResourceAsStream("mensajes.properties"));
Nota 2: La llamada a info.getProperty puede hacerse pasando un segundo argumento adicional que representa un valor por defecto en el caso de no encontrar la clave especificada. Esto puede llegar a resultar muy útil sobre todo cuando existen multitud de claves, ya que puede darse el caso de que nos olvidemos escribir alguna. En nuestro ejemplo podríamos haber escrito:
String saludo = info.getProperty("saludo", "Hola"); String sujeto = info.getProperty("sujeto", "humano");
Con estas dos observaciones, nuestro programa mejorado quedaría:
package org.tutorialexception; import java.io.IOException; import java.util.Properties; public class Main { public static void main(String[] args) { Properties info = new Properties(); try { info.load(Main.class.getResourceAsStream( "mensajes.properties" )); String saludo = info.getProperty("saludo", "Hola"); String sujeto = info.getProperty("sujeto", "humano"); System.out.println(saludo + " " + sujeto); } catch (IOException ex) { System.out.println(ex); } } }
1 comentarios:
Si estas interesado en traducir archivos .properties, yo recomiendo altamente esta rápida y intuitiva herramienta en línea para la localización de software: https://poeditor.com/
Publicar un comentario