Boa tarde.
Gostaria de saber se é possível criar um arquivo .properties e ao mesmo tempo dizer que ele é oculto, gostaria de fazer isso para evitar que o usuário delete o .properties.
Vlw.
Boa tarde.
Gostaria de saber se é possível criar um arquivo .properties e ao mesmo tempo dizer que ele é oculto, gostaria de fazer isso para evitar que o usuário delete o .properties.
Vlw.
Eu prefiro usar, no caso do Windows, a API de Preferences, já que elas ficam gravadas no Registry, não em um arquivo.
No caso do Linux, você pode tentar iniciar o nome do arquivo com um . (embora isso não “esconda muito” o arquivo). Por exemplo, um arquivo .seuSistema.properties não fica visível em uma listagem a menos que você passe um parâmetro -a para o comando ls.
Veja: http://docs.oracle.com/javase/7/docs/technotes/guides/preferences/
http://www.vogella.com/articles/JavaPreferences/
você pode guardar o properties no propio jar, assim se para o cara deletar ele só se ele deletar o programa em sí
Obs : o unico problema é que você não pode modificar o properties, só poderá ler ele
entanglement e Victor Gerin, obrigado pela ajuda, mas a principio como eu tenho que alterar os dados do .properties em cada cliente pois guarda dados da conexão com o servidor (caminho, usuário e senha do banco) eu não poderia usar as ideias citadas.
o meu objetivo é apenas ocultar o arquivo para “dificultar” erros de usuários leigos.
Usuário e senha do banco? Então - é um Preferences mesmo. Você pode até usar uma versão do Preferences que guarda arrays de bytes em vez de strings, nesse caso ele guarda no Registry em hexadecimal - não fica cifrado mas fica mais difícil de o usuário ficar mexendo.
Eu uso muito Preferences quando preciso, por exemplo, guardar o último tamanho de um diálogo que o usuário redimensionou, ou quando preciso que um determinado textfield se lembre de dados que já foram digitados.
entanglement, o preferences armazena estas informações onde? depois que eu reiniciar o aplicativo elas não seriam perdidas?
Você trabalha com Windows ou Linux? No Windows, ele guarda no Registry, e as informações não são removidas quando a aplicação é encerrada.
No Linux, ele guarda em arquivos .XML, e você pode especificar o nome do arquivo (embora o padrão, se não me engano, é um nome de arquivo que começa por “.”, para que fique escondido, mas como não usei essa API no Linux, eu não sei os detalhes práticos
)
entanglement, utilizo windows, obrigado pelo esclarecimento, eu tinha só lido por cima e tinha entendido que o preferences só funcionava em tempo de execução (desculpe a falta de atenção e futuramente usarei em minhas aplicações).
conversei com o coordenador do projeto e ele disse que isso não pode ser alterado, que deve ficar no .properties e eu devo achar uma forma de ocultar o arquivo.
Na falta de opção utilizarei o
Runtime.getRuntime().exec("cmd /c attrib -h .properties");
Obrigado pela atenção.
Olha eu posso ter uma solução para você, depois de pesquisar bastante aqui xD
já que você tem que continuar a usar o properties vamos juntar as opções tipo assim, ao invés de você salvar o as propriedades em um arquivo você pode salvar elas no preferences
Assim + ou -
//inicia uma Properties para ser salva
Properties prop = new Properties();
prop.setProperty("ola", "mundo");
//para salvar precisei usar os Pipers para transformar em String o Properties e salvar no Perferences
try (PipedInputStream Pin = new PipedInputStream()) {
try (PipedOutputStream Pout = new PipedOutputStream(Pin)) {
prop.store(Pout, null);
Pout.flush();
}
Scanner s = new Scanner(Pin);
StringBuilder sb = new StringBuilder();
while (s.hasNextLine()) {
sb.append(s.nextLine()).append("\n");
}
Preferences pref = Preferences.userRoot().node("Nome Qualquer");
pref.put("Properties", sb.toString());
}
//Para carregar foi mais fácil pois usei o StringReader xD
Preferences pref = Preferences.userRoot().node("Nome Qualquer");
String get = pref.get("Properties", null);
prop = new Properties();
Reader r = new StringReader(get);
prop.load(r);
prop.list(System.err);