2008-12-02 8 views
7

Mi aplicación Java está guardando cosas en 'usuario.casa' pero en Windows esto no parece ser la ruta correcta para guardar información de la aplicación (como un amigo me dijo). Otra opción es usar la API de preferencias pero no es posible configurar la ubicación hsqldb usando la API de preferencias. Además, quiero que todos los archivos estén disponibles en la misma carpeta (base de datos local, configuración, caché, ...).Guardando configuraciones de usuario/base de datos/caché ... en Java (en todos los SO)

Estoy buscando un código de ejemplo o un marco que se encargue de cosas específicas del os.

Respuesta

3

En mi sistema SP3 WinXP Pro, puntos user.home a C:\Documents and settings\<username> gran cantidad de aplicaciones simplemente almacenar sus datos allí (en lugar de estos datos camino de + de aplicación, pero algunos otros van a allí), la creación de un directorio en el estilo Unix , es decir. punto + nombre de la aplicación (ejemplos: .antexplorer, .sqlworkbench, .squirrel-sql, .SunDownloadManager, .p4qt, .gimp-2.4, etc.).

Parece que una práctica decente, común ...

1

Es inusual que una aplicación de ventana guarde los datos en el usuario.home pero no en "incorrecto". A las aplicaciones de Windows les encanta difundir sus datos por todos lados (un poco en el registro, un poco en el directorio de instalación de la aplicación, un poco en el directorio de Windows, un poco en System32, un poco aquí y un poco allí). Al final, esto hace que sea imposible realizar una copia de seguridad limpia o eliminar algo que da como resultado la famosa "podredumbre de Windows" (es decir, tiene que volver a instalar cada pocos meses).

De todos modos. Si realmente no desea usar user.home (y no veo ninguna razón para no hacerlo), use el código como this from Apache commons-lang para averiguar si se está ejecutando en Windows. Si esto es cierto, abra un cuadro de diálogo de selección de directorio donde el usuario puede especificar dónde quiere guardar sus datos.

Guarde esta información en Preferencias y use esta ruta la próxima vez que inicie su aplicación. De esta forma, los usuarios pueden especificar dónde quieren sus datos y solo tienen que dejar un bit de información en las preferencias.

1

Para una aplicación "foo" crearía un directorio llamado ".foo" dentro de user.home. Para Windows parecerá un poco extraño, pero casi nadie mira en ese directorio (y está lleno de directorios oscuros de todos modos) y en Linux/Solaris/... dará como resultado un directorio oculto que no saturará el directorio de inicio de los usuarios. visualmente.

+0

Muchas aplicaciones hacen esto, pidgin, etc. – SCdF

0

El problema no es Wiindows sino la configuración estándar de Java.

larga discusión http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4787931>Here

Yo aconsejaría detectar esto en una propiedad '-D myLoc =% USERPROFILE%' en la línea de comando.

Tenga en cuenta que solo obtendrá un "PERFIL DE USUARIO" si el usuario realizó un inicio de sesión de escritorio, esto no se establece si el usuario inició sesión remotamente con citrix o similar o mediante ssh, también, los escritorios copripados utilizan esta configuración y puede establecerlo en algo inutilizable.

1

leer de forma dinámica (desde el código) el valor de la variable de entorno APPDATA, y almacenar sus archivos de configuración en %APPDATA%\\.myapp\config

==> valor es dependiente de la plataforma , no use ninguna ruta codificada, siempre lea el env. var.

Cuestiones relacionadas