Como criar um arquivo de inicialização para armazenar algumas configurações em Java?

StackOverflow https://stackoverflow.com/questions/193474

Pergunta

Eu quero criar um arquivo ini para armazenar algumas configurações para a minha candidatura. É uma boa idéia para descobrir onde o arquivo jar está localizado e criar um arquivo ini lá? Se sim, então como posso encontrar o local do arquivo jar?

Mas se você conhece uma solução melhor para algo como isso, eu gostaria de ouvir alguns deles.

Editar : Eu estou usando o mac e eu quero executar o mesmo aplicativo no Windows. Eu poderia escrever algo no System.getProperty ( "user.home") anuário, mas eu quero manter o sistema limpo, se o usuário decide remover o aplicativo. Não há uma maneira melhor para armazenar o arquivo de configurações, por exemplo, no mesmo diretório com o aplicativo?

Foi útil?

Solução

Você pode localizar seu diretório de aplicativo usando o ClassLoader. Veja: Java: encontrar o diretório do aplicativo . Em vez de um ini arquivo, use um .properties arquivo - você pode carregar e salvar esta via o Propriedades classe.

Como outros já mencionado, você não deve escrever as configurações do usuário para o diretório do aplicativo. E se o usuário não tem acesso de gravação para o diretório do aplicativo? E se o seu aplicativo está sendo usado por vários usuários no mesmo sistema ao mesmo tempo? Nenhuma destas situações são incomuns, mesmo no Windows.

Você ainda pode querer carregar algumas configurações do diretório do aplicativo -. Configurações padrão talvez o administrador tiver configurado lá

A convenção comum é salvar as configurações do usuário para o diretório home do usuário:

/home/user/.eclipse
C:\Documents and Settings\User\.eclipse

Embora isso signifique que você pode deixar os arquivos dispersos por trás, isso pode ser benéfico se o usuário re-instala o aplicativo. Documentar tais coisas em um README. Aqui é como criar e obter uma referência para o diretório:

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;
}

No UNIX-like sistemas operacionais, começando o nome do diretório com um ponto ( ".myappdir") fará com que o diretório escondido. No Windows, ele será localizado abaixo Meus documentos , para que os usuários não vão ver o diretório a menos que ir procurá-lo.

Outras dicas

Se as definições só são escritas pelo seu aplicativo (em vez de editar manualmente), considere usar o Preferences API .

Você não deve ser armazenar os arquivos temporários no diretório de instalação de um aplicativo. Lembre-se, o usuário que executa o aplicativo pode não ter acesso de gravação para esse diretório. O lugar mais seguro para colocar coisas como que está em C:. \ Documents and username \ pasta Application Data \ ApplicationName Settings \ (ajustando o nome, se necessário)

Dito isto, no entanto, eu provavelmente armazenar esse tipo de coisa no registro em vez de um arquivo em seu computador. (Mas, isso é só comigo.)

Normalmente os programadores Java não usar arquivos ini, mas arquivos .properties (formato diferente). Você pode usar a classe java.lang.Properties como um invólucro programático bom se você faz.

Enquanto você pode obter a localização do seu arquivo jar chamando getProtectionDomain (). GetCodeSource (). GetLocation () no membro de sua classe .class, I não recomendamos que você faça isso.

eu, em vez escrever o arquivo para o System.getProperty ( "user.home") anuário - diretório home dos usuários, ou se é verdadeiramente temporária, System.getProperty ( 'java.io.tmpdir')

Depende se as suas necessidades ini para ser legível / gravável em circunstâncias normais. Se não, você pode usar um arquivo de propriedades em vez de um arquivo ini, e armazená-lo no diretório "user".

Como para encontrar o arquivo jar, você teria que encontrar o ClassLoader para uma classe conhecida a ser carregado a partir do frasco, verifique se ele era o tipo apropriado de ClassLoader (ou seja, que é realmente foi carregado a partir de um frasco), e você pode extrair o caminho a partir daí. Eu provavelmente pode cavar o código para fazer isso, se isso é realmente o que você quer. Eu não necessariamente recomendo.

Editar A propriedade user.home lhe dará o diretório do usuário, que você pode usar com segurança.

A idéia com o arquivo .properties em vez do arquivo INI é bom. Além disso, se você armazenar alguns dados sensíveis lá, você pode considerar criptografá-los. Veja isso:

https://www.owasp.org/index.php/How_to_encrypt_a_properties_file

ou este:

criptografar e valor do arquivo de propriedade descriptografar em java

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top