Chamar método get de acordo com arquivo .txt

Alguem teria alguma idéia de como eu poderia chamar um getter de acordo com a linha que eu estou lendo em um arquivo .txt
Por exemplo.

linha 1 - Encontrei a palavra Amor, devo chamar o get para armazenar a palavra Amor.
linha 33 - Encontrei a palavra Java, devo chamar o get para armazenar a palavra Java.

Porem o arquivo não é sequencia, digo, ele não é padrao sabe.

Pode inverter as coisas como Amor, estar na linha 23 e Java na linha 74.

Alguma idéia de como resolver este problema?

Agradeço a todos que responderem.

Sem mais,

Obrigado.

É isto que pretendes?

como você encontra a palavra amor?

simples, faz um teste if(encontrou amor){getAmor}else if(encontrou java){getJava}

String nomeMetodo = "get" + palavra;

obj.getClass().getMethod(nomeMetodo).invoke(obj);

No código acima é possível obter um método através de sua assinatura. Ou seja, você obtém a classe do objeto, a partir da classe você encontra o método pelo nome e invoca o método, passando o objeto sobre o qual o método será executado e os parâmetros.

Só não entendi uma coisa, usar “get” para armazenar, não seria um método set ?

The Reflection API

[quote=ssh]como você encontra a palavra amor?

simples, faz um teste if(encontrou amor){getAmor}else if(encontrou java){getJava}[/quote]

o cara quer uma solução, não uma POG.

Cara, reflection API resolve teu caso, ele pode pegar o método através do valor encontrado.

E por que ele deveria usar reflection? Até onde ele falou, só precisa ler de um arquivo e armazenar em algum lugar a palavra. Ele não falou que o método deveria se chamar setAmor(), ou getAmor().

No caso, mesmo que seja assim que você organizou o programa, considere fortemente a possibilidade de passar o valor por parâmetro. Por exemplo, vamos supor que seu arquivo tenha palavras separadas por espaço, podendo ou não conter quebras de linha:

Scanner scan = new Scanner(new File(seuArquivo)); while (scan.hasNextLine()) { String[] palavras = scan.nextLine().split(" "); for (String palavra : palavras) { seuDao.salvar(palavra); } } scan.close();

Particularmente, se o conjunto de palavras for conhecido, e se houver mesmo necessidade de um método para cada palvra, acho a solução com ifs menos “POG” que a reflection. Para usar reflexão com base em arquivos, sockets ou qualquer outro meio externo ao seu software, ou você faz a coisa muito bem feita, validando cuidadosamente a entrada, ou então, você não faz. Caso contrário, está correndo sérios riscos de inserir chamadas inválidas no seu programa e gerar erros que dão muita dor de cabeça para se corrigir.

Melhor ainda se, sem reflection, você substituir os ifs por um enum com polimorfismo, ou pelo padrão Strategy.

Muito obrigado pelas respostas.

Vou verificar as mais válidas que me foram sugeridas e vou postando os resultados.

O grande problema deste arquivo é que ele não tem um padrão.

Por exemplo.

Ele pode vir da seguinte forma em linhas diferentes.

Receber ajuda não significa que você fracassou, mas que exitem pessoas que se importam com seu sucesso!

Receber ajuda
não significa que você fracassou, mas que existem pessoas que se importam com seu sucesso!

Bom. Mas vou continuar trabalhando nele.

Obrigado novamente a todos pelas respostas.

Sem mais.

Como disse que iria continuar postando mee desenvolvimento.

Agora posso o seguinte problema.

Criei uma classe, na verdade fiz pequenas modificações em uma que encontrei, Reflections que me retorna a quantidade de setters existentes em meu programa, isso me ajuda muito, assim posso ir chamando um a uma até chegar ao fim e salvar no banco.

Vou lhes mostrar minha classe.

Reflections

/*
 * Classe que é responsável por fazer a reflection do campo, ou seja 
 * trazer para o sistema o getter correspondente.
 */
package br.com.conlicitacao.util;

import java.lang.reflect.Method;

/**
 *
 * @author Carlos Eduardo
 */
public class Reflections {
    

    public static int howManyGetters(Class aClass){
        Method[] methods = aClass.getMethods();
        int count = 0;
        
        for(Method method : methods){
            if(isGetter(method)){
                count++;
            }
        }
        
        return count;
    }
    
    public static int howManySetters(Class aClass){
        Method[] methods = aClass.getMethods();
        int count = 0;
        
        for(Method method : methods){
            if(isSetter(method))
                count++;
        }
        
        return count;
    }
    
    public static boolean isGetter(Method method){
        if(!method.getName().startsWith("getCon"))      
            return false;
        
        if(method.getParameterTypes().length != 0)   
            return false;  
        
        if(void.class.equals(method.getReturnType())) 
            return false;
        
    return true;
    }

    public static boolean isSetter(Method method){
        if(!method.getName().startsWith("set")) 
            return false;
        
        if(method.getParameterTypes().length != 1) 
            return false;
        
        return true;
    }
}

Conlicitacao

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.conlicitacao.model;

import br.com.conlicitacao.util.Reflections;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.apache.commons.lang3.text.WordUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 *
 * @author Carlos Eduardo
 */
@ManagedBean(name = "conlicitacao")
@ViewScoped
public class Conlicitacao {
    
    public Conlicitacao() {
    }
    private int conCodigo;
    private String conObjeto;
    private String conEdital;
    private String conNumero;
    private String conProcesso;
    private String conData;
    private String conObservacao;
    private String conUnidadeLicitante;
    private String conEndereco;
    private String conCep;
    private String conCidade;
    private String conFone;
    private String conHomePage;
    
    public Conlicitacao(int codigo) {
        this.conCodigo = codigo;
    }

    /**
     * @return the conCodigo
     */
    public int getConCodigo() {
        return conCodigo;
    }

    /**
     * @return the conObjeto
     */
    public String getConObjeto() {
        return conObjeto;
    }

    /**
     * @return the conEdital
     */
    public String getConEdital() {
        return conEdital;
    }

    /**
     * @return the conNumero
     */
    public String getConNumero() {
        return conNumero;
    }

    /**
     * @return the conProcesso
     */
    public String getConProcesso() {
        return conProcesso;
    }

    /**
     * @return the conData
     */
    public String getConData() {
        return conData;
    }

    /**
     * @return the conObservacao
     */
    public String getConObservacao() {
        return conObservacao;
    }

    /**
     * @return the conUnidadeLicitante
     */
    public String getConUnidadeLicitante() {
        return conUnidadeLicitante;
    }

    /**
     * @return the conEndereco
     */
    public String getConEndereco() {
        return conEndereco;
    }

    /**
     * @return the conCep
     */
    public String getConCep() {
        return conCep;
    }

    /**
     * @return the conCidade
     */
    public String getConCidade() {
        return conCidade;
    }

    /**
     * @return the conFone
     */
    public String getConFone() {
        return conFone;
    }

    /**
     * @return the conHomePage
     */
    public String getConHomePage() {
        return conHomePage;
    }

    /**
     * @param conCodigo the conCodigo to set
     */
    public void setConCodigo(int conCodigo) {
        this.conCodigo = conCodigo;
    }

    /**
     * @param conObjeto the conObjeto to set
     */
    public void setConObjeto(String conObjeto) {
        this.conObjeto = conObjeto;
    }

    /**
     * @param conEdital the conEdital to set
     */
    public void setConEdital(String conEdital) {
        this.conEdital = conEdital;
    }

    /**
     * @param conNumero the conNumero to set
     */
    public void setConNumero(String conNumero) {
        this.conNumero = conNumero;
    }

    /**
     * @param conProcesso the conProcesso to set
     */
    public void setConProcesso(String conProcesso) {
        this.conProcesso = conProcesso;
    }

    /**
     * @param conData the conData to set
     */
    public void setConData(String conData) {
        this.conData = conData;
    }

    /**
     * @param conObservacao the conObservacao to set
     */
    public void setConObservacao(String conObservacao) {
        this.conObservacao = conObservacao;
    }

    /**
     * @param conUnidadeLicitante the conUnidadeLicitante to set
     */
    public void setConUnidadeLicitante(String conUnidadeLicitante) {
        this.conUnidadeLicitante = conUnidadeLicitante;
    }

    /**
     * @param conEndereco the conEndereco to set
     */
    public void setConEndereco(String conEndereco) {
        this.conEndereco = conEndereco;
    }

    /**
     * @param conCep the conCep to set
     */
    public void setConCep(String conCep) {
        this.conCep = conCep;
    }

    /**
     * @param conCidade the conCidade to set
     */
    public void setConCidade(String conCidade) {
        this.conCidade = conCidade;
    }

    /**
     * @param conFone the conFone to set
     */
    public void setConFone(String conFone) {
        this.conFone = conFone;
    }

    /**
     * @param conHomePage the conHomePage to set
     */
    public void setConHomePage(String conHomePage) {
        this.conHomePage = conHomePage;
    }

    /*
     * Faz a validação de cada valor para saber o mesmo é um valor de identificação ex: Objeto. Caso contrario retorna 
     * verdadeiro para que o programa possa prosseguir.
     * 
     */
    public static boolean validaPreenchimento(String string, List<String> lista) {
        for (String list : lista) {
            if (string.contains(list) || string.isEmpty()) {
                return false;
            } else {
                
            }
        }
        return true;
    }
    
    public static List<String> getList() {
        File arquivoHTML = new File("C:/Conlicitacao.html");
        try {
            Document documento = Jsoup.parse(arquivoHTML, "ISO-8859-1");
            Elements nodes = documento.select("[width=20%]");
            
            List<String> lista = new ArrayList<String>();
            
            for (Element no : nodes) {
                String objeto = no.text();
                if (validaPreenchimento(objeto, lista)) {
                    lista.add(objeto);
                }
            }
            return lista;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    
    public static boolean validaValorLista(List<String> lista, String valor) {
        if (lista.contains(valor)) {
            return false;
        }
        return true;
    }
    
    public List<String> procuraValorTabela(List<String> lista) {
        File arquivoHTML = new File("C:/Conlicitacao.html");
        List<String> list = new ArrayList<String>();
        Conlicitacao con = new Conlicitacao();
        
        try {
            Document documento = Jsoup.parse(arquivoHTML, "ISO-8859-1");
            Elements nodes = documento.select("td");
            
            for (Element no : nodes) {
                String texto = no.text();
                if (!stringVazia(texto)) {
                    if (validaPreenchimento(texto, lista)) {
                        texto = strippedString(texto).toLowerCase();
                        texto = WordUtils.capitalize(texto);
                        list.add(texto);
                    }
                }
            }
            return list;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    
    public boolean stringVazia(String string) {
        string = string.trim();
        if (string.isEmpty()) {
            return true;
        }
        return false;
    }

    /*
     * Faz a verificação da lista gerada item a item e chama o arquivo correspondente.
     */
    /*
     * Remove todos os caracteres especiais da String passada ao parãmetro.
     */
    public static String strippedString(String string) {
        
        String pattern = "[*]";
        String strippedString = string.replaceAll(pattern, "");
        
        return strippedString.trim();
    }
    
    public static void main(String args[]) {
        Conlicitacao con = new Conlicitacao();
        List<String> list = getList();
        List<String> listaValores = con.procuraValorTabela(list);
        
        for (String string : listaValores) {
            System.out.println(string);
        }
        
        
        Reflections.printGettersSetters(Conlicitacao.class);
        System.out.println(Reflections.howManyGetters(Conlicitacao.class));
        
        
    }
}

Eu pego um .html removo os valores da coluna que não me interessa e coloco em uma lista os valores que são necessários. Até ae tudo ótimo.
Porém o problema é:
Suponhamos que meu getList() me retorne os seguinte valores: Objeto:, Edital:.
Quando faço a verificação novamente eu qustiono ao meu programa se a coluna que estou lendo é igual a esta que já foi armazenada se sim ele não faz nada.
O que percebi é que a leitura sequencial, ou seja a proxima vez que ele percorre o node, o valor do texto é o correspondente ao anterior.
Ex.:

Li - Objeto: -> Não insiro na lista.
Li - Valor do objeto -> Insiro na lista.

Só que isso me faz perder uma forma de referenciar este valor ao seu setter correspondente.

Será que podem me ajudar quanto a isso?

Sem mais.

Obrigado.