2012-06-21 7 views
5

Estoy creando una aplicación de escritorio Java y necesito almacenar algunos datos locales (preferencias e historial). Para esto me gustaría crear una nueva carpeta en la ubicación adecuada, como AppData \ myapp en Windows y ~/.myapp en Linux (y donde se espera en una Mac).Crear un directorio de almacenamiento local en la aplicación de escritorio Java

¿Cuál es la buena manera de hacer eso, multiplataforma?


que he visto varias preguntas sobre este sitio que preguntar acerca de este, pero o bien:

  • El autor de la pregunta quiere encontrar Datos de programa de Windows' (no multiplataforma)
  • La solución es crear una carpeta en user.home (estilo Linux, no multiplataforma) Esto es lo que hago actualmente, pero estoy buscando una mejora.

Respuesta

0

Usar user.home propiedad del sistema. De esta manera:

String userHomePath = System.getProperty("user.home"); 
File myAwesomeFolder = new File(useHomePath, "myAweSomeApp"); 
myAwesomeFolder.mkdirs(); 
+0

He probado que en Windows 7 donde vuelve 'C: \ Usuario \ John', mientras que yo quiero, probablemente' C: \ Users \ Juan \ AppData \ Local' –

+0

@BartvanHeukelom, bueno, eso es porque devuelve su carpeta 'home', no' AppData'. – npe

+0

'user.home' es un lugar que garantiza la escritura y es x-plat. Tal vez puedas usar una variable de entorno donde sea conocido y 'user.home' en caso contrario. –

3

Siempre se puede utilizar el Java Preferences API que almacenará información de cada usuario y no tiene que preocuparse acerca de la aplicación. Existen diferentes implementaciones disponibles para diferentes plataformas, pero eso está oculto para usted (el cliente).

Una alternativa es utilizar la API Apache Commons Configuration, que es más compleja, pero le ofrece muchas más características.

+0

Ese podría ser un buen lugar para las preferencias, como él dice, pero los datos de la historia probablemente no deberían estar allí. – maba

+0

De hecho, no parece encajar por completo, pero es interesante, no obstante. No sabía de esta API. –

+0

Supongo que la pregunta sobre la historia puede depender de cómo * mucho * historial. Ambas API tendrán la capacidad, pero quizás algunas pruebas de carga estén en orden –

-1

no confirmado sobre Linux pero puede hacer la entrada al registro de Windows también.

de cualquier manera,

String path = System.getProperty("user.home")+ "\\AppLication Data"+"\\xyzFolder"; 

esto funciona tanto para Windows 7 a causa% appdata% muestra el camino que legado para arriba.

+0

Esto es cualquier cosa menos multiplataforma. –

1
import java.io.File; 

public class AppPathFolder { 

    public static void main(String[] args) { 
     String path = null; 
     String osName = System.getProperty("os.name").toLowerCase(); 
     if (osName.indexOf("windows")>-1) { 
      path = System.getenv("APPDATA"); 
     } else if (osName.indexOf("mac")>-1) { 
      // get the env. variable for Mac.. 
      path = System.getenv("?"); 
      // etc. for Linux, Unix, Solaris.. 
     } else { //anything else 
      path = System.getProperty("user.home"); 
     } 
     File rootOfPath = new File(path); 
     // create a sub-directory based on package name of main class.. 
     // perhaps prefixed with with java/appdata 
     System.out.println(rootOfPath); 
    } 
} 

Por supuesto, hay otras opciones para pequeñas cantidades de datos:

  • Aplicaciones. que son de confianza o no tienen un administrador de seguridad pueden usar Preferences API
  • Una aplicación de escritorio. lanzado utilizando Java Web Start tiene acceso a la API JNLP, que ofrece el PersistenceService - disponible incluso para aplicaciones de caja de arena.
  • Un applet puede almacenar cookies.
Cuestiones relacionadas