[RESOLVIDO] .properties oculto

8 respostas
Malister

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.

8 Respostas

E

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/

V

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

Malister

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.

E

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.

Malister

entanglement, o preferences armazena estas informações onde? depois que eu reiniciar o aplicativo elas não seriam perdidas?

E

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 :slight_smile: )

Malister

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.

V

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);
Criado 11 de julho de 2013
Ultima resposta 11 de jul. de 2013
Respostas 8
Participantes 3