sobreescribir - modificar archivos txt en java
¿Cómo crear un archivo.INI para almacenar algunas configuraciones en Java? (6)
Quiero crear un archivo ini para almacenar algunas configuraciones para mi aplicación. ¿Es una buena idea encontrar dónde se encuentra el archivo jar y crear un archivo ini allí? En caso afirmativo, ¿cómo puedo encontrar la ubicación del archivo jar?
Pero si conoce una solución mejor para algo como esto, me gustaría escuchar algunos de ellos.
EDITAR : estoy usando mac y quiero ejecutar la misma aplicación en Windows. Podría escribir algo en el directorio System.getProperty ("user.home"), pero quiero mantener el sistema limpio, si el usuario decide eliminar la aplicación. ¿No hay una mejor manera de almacenar el archivo de configuración, por ejemplo, en el mismo directorio con la aplicación?
Puede ubicar el directorio de su aplicación usando el ClassLoader. Ver: Java: encontrar el directorio de la aplicación . En lugar de un archivo .INI , use un archivo .properties ; puede cargarlo y guardarlo a través de la clase Propiedades .
Como han señalado otros, no debe escribir configuraciones de usuario en su directorio de aplicaciones. ¿Qué pasa si el usuario no tiene acceso de escritura al directorio de la aplicación? ¿Qué ocurre si su aplicación está siendo utilizada por múltiples usuarios en el mismo sistema al mismo tiempo? Ninguna de estas situaciones es inusual, incluso en Windows.
Es posible que aún desee cargar algunas configuraciones desde el directorio de la aplicación, quizás el administrador haya configurado allí las configuraciones predeterminadas.
Una convención común es guardar la configuración del usuario en el directorio de inicio del usuario:
/home/user/.eclipse
C:/Documents and Settings/User/.eclipse
Aunque esto significa que puede dejar archivos perdidos, esto puede ser beneficioso si el usuario vuelve a instalar la aplicación. Documente tales cosas en un README. Aquí es cómo crear y obtener una referencia al directorio:
public static File getSettingsDirectory() {
String userHome = System.getProperty("user.home");
if(userHome == null) {
throw new IllegalStateException("user.home==null");
}
File home = new File(userHome);
File settingsDirectory = new File(home, ".myappdir");
if(!settingsDirectory.exists()) {
if(!settingsDirectory.mkdir()) {
throw new IllegalStateException(settingsDirectory.toString());
}
}
return settingsDirectory;
}
En los sistemas operativos tipo Unix, iniciar el nombre del directorio con un punto (".myappdir") hará que el directorio quede oculto. En Windows, se ubicará debajo de Mis documentos , por lo que los usuarios no verán el directorio a menos que lo busquen.
No debe almacenar archivos temporales en el directorio de instalación de una aplicación. Recuerde, el usuario que ejecuta la aplicación puede no tener acceso de escritura a ese directorio. El lugar más seguro para poner cosas así es en la carpeta C: / Documents and Settings / username / Application Data / ApplicationName (ajustando el nombre según sea necesario).
Dicho esto, sin embargo, probablemente almacenara ese tipo de cosas en el registro en lugar de un archivo en su computadora. (Pero, soy solo yo)
Por lo general, los programadores de Java no usan archivos .ini, sino archivos .properties (formato diferente). Puedes usar la clase java.lang.Properties como un buen envoltorio programático si lo haces.
Si bien puedes obtener la ubicación de tu archivo jar llamando a getProtectionDomain (). GetCodeSource (). GetLocation () en el miembro .class de tu clase, no te recomiendo que hagas esto.
En su lugar, escribiría el archivo en el directorio System.getProperty ("usuario.casa"), el directorio de inicio de los usuarios, o si es realmente temporal, System.getProperty ("java.io.tmpdir")
Depende de si su ini necesita ser legible / escribible por humanos en circunstancias normales. De lo contrario, puede usar un archivo de propiedades en lugar de un archivo ini, y almacenarlo en el directorio "usuario".
En cuanto a encontrar el archivo jar, tendría que encontrar el ClassLoader para una clase que se sabe que está cargada desde el jar, comprobar que era el tipo apropiado de ClassLoader (es decir, que realmente se ha cargado desde un jar), y puede extraer el camino desde eso. Probablemente pueda desenterrar el código para hacer esto si eso es realmente lo que quieres. No necesariamente lo recomendaría.
EDITAR La propiedad user.home le dará el directorio de usuario, que puede usar de forma segura.
Si la configuración solo la escribe su aplicación (en lugar de editarla manualmente), considere usar la API de Preferencias .
La idea con el archivo .properties en lugar del archivo INI es buena. Además, si almacena algunos datos confidenciales allí, puede considerar encriptarlos. Mira esto:
https://www.owasp.org/index.php/How_to_encrypt_a_properties_file
o esto:
encriptar y desencriptar el valor del archivo de propiedad en java