2011-01-12 11 views
11

El Java tutorial sobre el uso de propiedades habla sobre cómo usar la clase Propiedades. En el tutorial, muestra las propiedades que se escriben en un archivo llamado "propiedades predeterminadas". Entonces, ¿qué es un buen nombre y ubicación para el archivo de propiedades?¿Dónde almacenar archivos .properties para Java?

Normalmente escribo una de las dos aplicaciones java: una utilidad del sistema o un programa de usuario. Creo que la mayoría de las utilidades del sistema tendrían un archivo en /etc/myfile.properties y la mayoría de los programas de usuario crearían un ~/.myfile.properties. Sin embargo, estas rutas no funcionarían en Windows. ¿Existe una forma más genérica de definir estos detalles para hacer que la plataforma de código sea independiente?

+0

Eche un vistazo a esta solución: http://stackoverflow.com/questions/966029 – Hiro2k

+0

La respuesta breve a su pregunta final es "no". Windows realmente no tiene buenos lugares para mantener los archivos de configuración de la misma forma que lo hace Unix, porque está menos orientado a archivos. Esa es precisamente la razón por la que se inventó la API de preferencias. Lo cual es una pena, lo admito, pero ahí lo tienes. –

Respuesta

0

Aquí hay un par de soluciones alternativas:

  • Leer el archivo de propiedades de la ruta de clases
  • Pasar la ruta de acceso al archivo de propiedades como un argumento de inicio para la aplicación

Su lectura desde el classpath le da flexibilidad, ya que puede incluirlo en el propio contenedor o especificarlo cuando se inicia la aplicación.

6

Si se trata de mantener archivo de propiedades externa para configurar su aplicación a continuación Yo sugeriría

System.getProperty("user.home")+File.separator+ "yourappname"+File.separator+"name.properties" 

de si se está hablando de archivo de propiedades colocaron interna para su proyecto mantenerlo en default package. otros

O

opciones están utilizando archivo XML, o Preference

+0

Esto parece factible. ¿Existe un equivalente independiente de la plataforma a '/ etc'? Ni siquiera estoy seguro de qué se correlacionaría en Windows, ya que el registro generalmente se usa para esa información. – User1

+0

'System.getProperty (" usuario.home ")' es independiente de la plataforma, para Linux sería/home/userName /, para windows sería 'c: \\ Documents and Settings \\ userName \\' –

+0

life.java: inesperadamente, en Windows, no es C: \ Documents and Settings \ userName, es algo así como C: \ WINNT \ Profiles \ userName. Consulte http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4162112 y sus amigos. Sin embargo, para los propósitos del Usuario1, esto es probablemente mejor. –

0

Si estas Sujeción de los puntales archivo como parte de la aplicación y es de sólo lectura y luego lo puso en archivo jar. Si también tiene que actualizarlo, hágalo disponible a través de file: /// url y pase la ruta del archivo como un argumento JVM (-DfileUrl = ...).

mirada a este post sobre cómo leer los puntales archivo de un JAR en la ruta de clase: Reading properties file from JAR directory

7

En este caso me gustaría utilizar la API Preferences en lugar de Properties.

Preferences le permite almacenar/recuperar la configuración del usuario y del sistema y automáticamente maneja la persistencia por usted. La persistencia es específica de la plataforma; para Windows usa el registro y para Unix usa archivos ocultos.

+1

Me gusta esta idea y creo que funcionaría para la mayoría de los proyectos. Quiero un archivo de configuración expuesto que el usuario pueda ajustar fuera de la aplicación. ¿Hay alguna manera de hacer que la API 'Preferences' funcione de esa manera? – User1

+0

Si quiere un archivo de configuración que el usuario pueda ajustar, use' Properties'. – Qwerky

0

Usar jndi es una buena solución. Configuración del tiempo de ejecución a través de la consola de administración del servidor web. Webapp cambiará los cambios tan pronto como obtenga una propiedad. No tiene que reiniciar la aplicación.

Cuestiones relacionadas