Erro ao carregar properties

5 respostas
E

Boa tarde a todos, estou com um problema e ja faz um tempo que não encontro o motivo deste erro.

É o seguinte, estou utilizando arquivos properties para manter algumas configurações por usuario, entao gravo e carrego conforme as necessidades,
ate tudo bem, funciona normal, mas tem casos esporadicos em que aparece esta escrita abaixo no arquivo properties.

\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000=

E no carregar da o seguinte erro: malformed \uxxxx encoding. Em alguns casos tens palavras com acentuação, mas estas palavras nao apresentam erros.
Entao quero ver se alguem teria como ajudar, nao sei o porque esta dando este erro, mas preciso corrigi-lo o quanto antes.

Se alguem poder me ajudar, fico grato e agradeço desde ja a atenção de todos.

5 Respostas

robson.java

Algum editor/programa utilizado pode estar alterando o encolding.

Para algumas informações e exemplos sobre encolding: http://blog.caelum.com.br/entendendo-unicode-e-os-character-encodings/

Se não resolver, poste o código e em que momento exato o properties é alterado.

Abrax.
Robson

E

Oi, não estou utilizando nenhum programa externo na configuração dos dados.
Este processo abaixo executo sempre que preciso configurar se um usuario alterou o cadastro em questao, é que tenho um cadastro no sistema que trabalha estilo uma arvore,
e sempre que um usuario for altera-la deve estar ciente de como ela esta atualmente, entao coloquei uma flag neste arquivo e configuro para true que houve alteração nos demais
usuarios do sistema, para que se estiverem com a janela aberta e quiserem alterar, terao que atualizar a janela, senao fica como esta, nao coloquei no banco esta opção
pois o usuario que esta alterando primeiro pode ficar alterando ate que outro venha e faça uma alteração antes dele.

public void setUltimoUsuario() throws Throwable {
		File file = new File("usuarios");
		if (file.exists()) {
			File[] contents = file.listFiles();  
			for (int i=0; i<contents.length; i++) {
				if (!contents[i].isDirectory() && contents[i].getAbsolutePath().toLowerCase().endsWith(".properties") && !contents[i].getName().equalsIgnoreCase(usuarioLogado+".properties")) {  
					Properties p = new Properties();
					p.load(new FileInputStream(contents[i].getAbsolutePath()));
					p.setProperty("dadosAlterado-"+codigoCadastro+"/"+subCodigo, "true");
					FileOutputStream out = new FileOutputStream(contents[i].getAbsolutePath());
					p.store(out, "Dados Colunas");
					out.close();
                }
            }  
        } 
	}

verifiquei o site que citasse, ja cheguei a verificar esta questão da mudança de encoding’s, mas nao consegui nada a este respeito pois as palavras com acentuação são modificadas conforme o encoding, mas mostro corretamente e não da erro em sua leitura.

robson.java

Pode estar corrempendo o arquivo em algum momento, seja na criação, visualização ou edição pois está convertendo o conteúdo para hexa vazio. Viu se não há concorrencia sobre o mesmo arquivo, mais de uma execução em andamento do mesmo programa pois a sua implementação referente a edição do properties está correta.

E

Há casos em que dois usuarios podem estar setando o mesmo arquivo, por exemplo este for que coloquei altera esta propriedade para true, mas outro usuario pode estar com o proprio arquivo em aberto para outras configurações pessoais.

O problema é que esta propriedade que esta sendo setada ali é para acusar que houve alteração na arvore, se outro usuario tentar alterar ele olha na sua properties e ve se pode alterar ou precisa atualizar, mas estou pensando em outra forma de fazer isto, mas se fizer em arquivos podera ocorrer o mesmo problema posteriormente e no banco de dados ficara meio lento este processo, pois pode ter muitos acessos simultaneos e depende o que os usuarios fizerem ficaria dando select e update direto.

Por acaso terias alguma sugestão?

robson.java

Eu recomendo armazenar no banco, ainda mais se tem muitos acessos e atualizações. IO é muito caro, utilize IO apenas se não houver jeito, no caso se fosse desktop e off-line no cliente por exemplo, mas vejo que não é o caso. Banco de dados foi feito pra isso, você verá que ficará muito mais rápido. Crie uma table AtualizacaoArvore, attributes id, usuario, flag=“S/N”. Simples assim. Não sobrecarregará sua rede ou processador fazendo IO.

Criado 21 de janeiro de 2013
Ultima resposta 22 de jan. de 2013
Respostas 5
Participantes 2