Título: Leer fichero de configuracion mediante java.util.properties
Publicado por: alzehimer_cerebral en 11 Abril 2010, 23:58 pm
Hola a todos, estoy teniendo problemas para acceder a los values de un properties mediante una clase que sigue el patron Singleton... La clase es la siguiente: public class ApplicationDirectories { static private ApplicationDirectories singleton = new ApplicationDirectories(); public ApplicationDirectories() { } /** * Default constructor */ public ApplicationDirectories (File configFile ) { try { System. out. println(configFile. getPath()); prop.load(is); } //end RepositoryManagement() /** * **GETTERS** */ /** * Returns the singleton attribute which is used to access the methods of this class from other packages * @return a RepositoryManagement object */ static public ApplicationDirectories getSingleton() { return singleton; } return prop; } /** * **SETTERS** */ this.prop=prope; } }
Cuando arranca la aplicacion quiero cargar el fichero de configuracion, pero cuando intento recuperar una de las propiedades me da como null, el codigo que empleo es el siguiente: File configFile = new File (System. getProperty("user.home"). concat(pathSeparator + ".Jsignalworkbench" + pathSeparator + "Config" + pathSeparator + "config.txt")); ApplicationDirectories app = new ApplicationDirectories(configFile); System. out. println(prope. getProperty("defaultRemotePath"));
Tambien he probado las siguientes dos lineas de codigo y ambas me devuelven null: System. out. println(global. ApplicationDirectories. getSingleton(). getProperties(). containsKey("defaultRemotePath")); System. out. println(global. ApplicationDirectories. getSingleton(). getProperties(). containsValue("defaultRemotePath"));
Si pruebo los accesos a properties sin la clase con el patron Singleton si que me devuelve los valores correctos contenidos en el fichero de configuracion, por lo tanto deduzco que el error viene de la clase ApplicationDirectories.... Alguien me puede hechar una mano en corregir el error que tiene la clase??? Espero vuestras respuestas y gracias de antemano. alzehimer_cerebral
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: Casidiablo en 12 Abril 2010, 03:01 am
En esta línea: System.out.println(prope.getProperty("defaultRemotePath")); De donde sacas el objeto "prope"?? Un saludo
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: Debci en 12 Abril 2010, 18:22 pm
En esta línea: System.out.println(prope.getProperty("defaultRemotePath")); De donde sacas el objeto "prope"?? Un saludo
Esta declarado como variable de instancia, creo... Saludos
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: alzehimer_cerebral en 12 Abril 2010, 21:02 pm
Haber al final la clase ha quedado asi: public class ApplicationDirectories { static private ApplicationDirectories singleton = new ApplicationDirectories(); public ApplicationDirectories() { } public void crearApplicationDirectories (File configFile ) { try { System. out. println(configFile. getPath()); prop.load(is); } //end RepositoryManagement() /** * **GETTERS** */ /** * Returns the singleton attribute which is used to access the methods of this class from other packages * @return a RepositoryManagement object */ static public ApplicationDirectories getSingleton() { return singleton; } return prop; } /** * **SETTERS** */ this.prop=prope; } }
Y al inicio del programa hago lo siguiente: String pathSeparator = System. getProperty("file.separator"); File configDir = new File(System. getProperty("user.home"). concat(pathSeparator + ".Jsignalworkbench" + pathSeparator + "Config")); File configFile = new File (System. getProperty("user.home"). concat(pathSeparator + ".Jsignalworkbench" + pathSeparator + "Config" + pathSeparator + "config.txt")); File appDir = new File (System. getProperty("user.home"). concat(pathSeparator + ".Jsignalworkbench")); if(configFile.exists()){ global.ApplicationDirectories.getSingleton().crearApplicationDirectories(configFile); } else{ if(!appDir.exists()){ //File aux = new File(global.ApplicationDirectories.getSingleton().getProperties().getProperty("appDir")); //global.ApplicationDirectories.getSingleton().ApplicationDirectories(configFile); //if (!aux.exists()){ //File dir = new File(System.getProperty("user.home").concat(pathSeparator + ".Jsignalworkbench")); if(!appDir.mkdir()){ JOptionPane. showMessageDialog(null, "Error in the creation of a directory needed for the program to run", "Error", JOptionPane. ERROR_MESSAGE); } } if(!configDir.exists()){ if(!configDir.mkdir()){ JOptionPane. showMessageDialog(null, "Error in the creation of a directory needed for the program to run 1", "Error", JOptionPane. ERROR_MESSAGE); } //Creation of the configFile file try { // A partir del objeto File creamos el fichero físicamente if (!configFile.createNewFile()){ JOptionPane. showMessageDialog(null, "Error in the creation of a file needed for the program to run", "Error", JOptionPane. ERROR_MESSAGE); } else System. out. println("Fichero de configuracion creado correctamente"); ioe.printStackTrace(); } System. out. println("fichero de config creado"); System. out. println(configFile. getPath()); //Write configFile data to the configFile file String lineSeparator = System. getProperty("line.separator"); bw.write("***CONFIG FILE***" + lineSeparator); //bw.write("homeDir =" + homeDir + lineSeparator); //String tmpDir = System.getProperty("java.io.tmpdir"); //bw.write("tmpDir =" + tmpDir + lineSeparator); String defaultRepositoriesPath = homeDir + pathSeparator + ".Jsignalworkbench" + pathSeparator + "Repositories"; bw.write("defaultRepositoriesPath =" + defaultRepositoriesPath + lineSeparator); String defaultRemotePath = "http://arregla-tu-pc.no-ip.biz/pruebas_proyecto/gasuco.xml"; bw.write("defaultRemotePath =" + defaultRemotePath + lineSeparator); //String appDir = homeDir + pathSeparator + ".Jsignalworkbench"; //bw.write("appDir =" + appDir + lineSeparator); String localPlugins = appDir + pathSeparator + "Local_plugins"; bw.write("localPlugins =" + localPlugins + lineSeparator); bw.close(); global.ApplicationDirectories.getSingleton().crearApplicationDirectories(configFile); } } System. out. println(global. ApplicationDirectories. getSingleton(). getProperties(). size()); System. out. println(global. ApplicationDirectories. getSingleton(). getProperties(). getProperty("localPlugins")); File repoDir = new File(global. ApplicationDirectories. getSingleton(). getProperties(). getProperty("defaultRepositoriesPath")); if(!repoDir.exists()){ System. out. println("No esxiste defaultRep path"); if(!repoDir.mkdir()){ JOptionPane. showMessageDialog(null, "Error in the creation of a directory needed for the program to run", "Error", JOptionPane. ERROR_MESSAGE); } } File plugDir = new File(global. ApplicationDirectories. getSingleton(). getProperties(). getProperty("localPlugins")); if(!plugDir.exists()){ if(!plugDir.mkdir()){ JOptionPane. showMessageDialog(null, "Error in the creation of a directory needed for the program to run", "Error", JOptionPane. ERROR_MESSAGE); } } }
El problema viene que cuando saco por pantalla System. out. println(global. ApplicationDirectories. getSingleton(). getProperties(). getProperty("localPlugins"));
me sale sin los separadores de path, es decir asi: C:Usersgasuco.JsignalworkbenchLocal_plugins.... Si miro dentro del fichero si que sale con las \. Que esta pasando??? Salu2 alzehimer_cerebral
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: Perikles en 12 Abril 2010, 23:25 pm
veo que estas en un entorno windows.
El caracter '\' s un carácter de escape y por lo tanto espera otro carácter después de este.
¿Puedes probar a cambiar en el fichero properties la propiedad localPlugins lo que tengas con este caracter '\' aeste otro '/' o poner '\\'?
Un saludo.
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: alzehimer_cerebral en 13 Abril 2010, 00:24 am
Okis lo puedo cambiar pero no en toda la cadena, me explico: String defaultRepositoriesPath = homeDir + pathSeparator + pathSeparator + ".Jsignalworkbench" + pathSeparator + pathSeparator + "Repositories";
Puedo meter dos pathSeparator, pero como meto dos \ en el SystemProperty("user.home")... Al sacar por pantalla System. out. println(global. ApplicationDirectories. getSingleton(). getProperties(). getProperty("defaultRepositoriesPath"));
Se queda asi: C:Usersgasuco\.Jsignalworkbench\Repositories Tendria que haber otra \ despues de Users... La cuestion es que antes de hacer esta implementacion estuve jugando con los metodos de la clase Propeties y esto no me pasaba, y tampoco usaba dos pathSeparator a la hora de crear el fichero... Alguna sugerencia??? Salu2 alzehimer_cerebral
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: Perikles en 13 Abril 2010, 00:54 am
Mira esto que acabo de hacer:
String base = System.getProperty("user.home"); File c = new File (base); File d = new File (c,"pruebas/hola.txt"); System.out.println(d.getAbsolutePath());
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: alzehimer_cerebral en 13 Abril 2010, 01:29 am
El problema es que al guardar de esa forma al igual que la mia lo guarda en el fichero perfectamente, pero a la hora de recuperar dicho path no coge las \..., por lo tanto eso no va a resolver el problema. Recuerda que el problema es al leer no al escribir, por lo tanto creo que en el fichero la ruta deberia tener \\ como separador de directorios. Lo que no se es como meterle el \\ en el user.home...
Quien me ayuda, necesito urgentemente resolver esto para poder seguir con el programa. Gracias por la colaboracion.
alzehimer_cerebral
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: Perikles en 13 Abril 2010, 01:54 am
String s = System.getProperty("user.home"); s = s.replace("\\", "/");
Trabaja con la barra del 7 (/), es mucho mejor
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: alzehimer_cerebral en 13 Abril 2010, 11:40 am
String defaultRepositoriesPath = homeDir + pathSeparator + pathSeparator + ".Jsignalworkbench" + pathSeparator + pathSeparator + "Repositories"; defaultRepositoriesPath = defaultRepositoriesPath.replace("\","\\");
No puedo trabajar con / ya que toda la aplicacion trabaja con \.... A la hora de hacer el replace me salta: illegla character \92 unclosed string literal Help please :P alzehimer_cerebral
Título: Re: Leer fichero de configuracion mediante java.util.properties
Publicado por: Perikles en 13 Abril 2010, 12:09 pm
Entonces tienes un problema, lo que quieres hacer no es posible
Si toda la aplicación trabaja con \ para el uso de URL, no va a ser posible (al menos hasta donde llega mi conocimiento) leer este caracter porque como ya dije es un caracter de escape.
Una solución chapuza que se me ocurre es que guardes en el properties otro caracter distitnto a \, es decir, antes de guardar en el properties sustituye los caracteres \\ por otra cosa (por ejemplo %&%) y los guardas en el properties y al leer el properties sustituyes %&% por \\.
|