Ir ao conteúdo
  • Cadastre-se
Vitor Avancini

Ordem de campo em registro para gravar em arquivos

Recommended Posts

Boa noite, galera!

Preciso fazer um programa que lê e escreve objetos em um arquivo (.txt), no qual existe um arquivo .ini que define algumas parametrizações para o software.

Uma dessas configurações é em qual ordem os campos serão salvos no arquivo (FieldOrder: ordem dos atributos no arquivo: name / cpf / phone / course / age / active).

Tenho um método chamado "generate" que cria um objeto, solicita as entradas ao usuário e grava no arquivo. A dúvida aqui é, como eu faço para colocar na ordem definida por esse .ini

 

O .ini é lido e cada configuração é uma variável

public class Descriptor {
    public static final char registerType = 'a';
    public static final String fieldSeparator = "a";
    public static final String fieldOrder = "name/cpf/phone/course/age/active";
    public static final String registerSeparator = "a";
    public static final int blockSize = 0;
    public static final char blockingType = 'a';
    public static final char blockingMethod = 'a';
    public static final String blockingPath = "a";
    public static final int maxNumberOfRecordsInMemory = 0;   
}

Inicializei dessa forma, para depois fazer a leitura do arquivo e setar cada variável. 

Eu poderia trocar os campos de lugares para seguir qualquer ordem para armazenar no txt. 

Como eu poderia fazer um método que conseguiria ler o fieldOrder e assim armazenar o objeto em um buffer (uma variavel do tipo string) com a ordem escolhida e assim guardar no arquivo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende de como está formatado o seu ini ... mas suponhamos que esteja da seguinte forma:

file.order = name/cpf/phone/course/age/active

Leia o Property de forma normal como abaixo:

URL url = new URL(filename);
try{
	Properties props = new Properties(); 
	props.load(url.openStream());
	return props;
}catch(IOException e){
	//trata o erro;
}

Mas, para pegar a lista da ordem, você pode fazer assim:

String[] order = props.getProperty("file.order").split("/");

Perfeito. Com a ordem em mãos, você pode fazer o próximo trabalho de duas formas: Da forma bonita e complicada (Usando Reflection)

for (String attribute : order){
    String methodName = "get" + attribute.substring(0, 1).toUpperCase() + attribute.substring(1);
    Testing.class.getMethod(method, null).invoke(object, null)); //Executa o método no objeto 'object'
}

...ou da forma mais simples mas mais trabalhosa, passando cada valorpara um Map<String, Object> onde a chave é o nome do atributo, e imprimindo dessa forma

for (String attribute : order){
	map.get(attribute);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×