Executar metodo em paginas jsp

Bom dia…

Estou desenvolvendo um projeto para web que faz a leitura de um arquivo texto e retira desse arquivo os campos indesejados e coloca em outro arquivo.
Na hora de passar esse metodo para a minha pagina jsf ele não funciona, mas se executá-lo em um metodo main qualquer ele faz a leitura e gera um arquivo de saida, meu metodo está assim:

[b]public static String Leitura() throws FileNotFoundException, IOException {

    BufferedReader inReader;
    BufferedWriter bfWriter;
    inReader = new BufferedReader(new FileReader("Cob.txt"));
    //criaçaõ do arquivo texto corrigido
    bfWriter = new BufferedWriter(new FileWriter("Cob_Inconsistente.txt"));
    String line;

    try {
        while ((line = inReader.readLine()) != null) {

            StringTokenizer st = new StringTokenizer(line, "|");


            codigoEscob = st.nextToken();
            operacao = st.nextToken();
            cpfCnpj = st.nextToken();
            dataAcionamento = st.nextToken();
            status = st.nextToken();
            ddd = st.nextToken();
            telefoneContatado = st.nextToken();
            codigoClassifStatus = st.nextToken();

//gravação da 1º linha do arquivo lido no arquivo de excessões
if (ddd.equals(“Código do Escob”) || ddd.equals(“CPF/CNPJ”) || ddd.equals(“Operação”) || ddd.equals(“Data do Acionamento”) || ddd.equals(“Status”) || ddd.equals(“DDD”) || ddd.equals(“Telefone contatado”) || ddd.equals(“Código de Classificação dos Status”)) {

                bfWriter.write(codigoEscob + " - " + operacao + " - " + cpfCnpj + "-" + dataAcionamento + " - " + status + "-" + ddd + "-" + telefoneContatado + "-" + codigoClassifStatus);
                bfWriter.newLine();
            }

            if (codigoClassifStatus.equals("0006")) {
                codigoClassifStatus = "6600";

            }
            if (ddd.equals("0000") || ddd.equals("0001") || ddd.equals("0002") || ddd.equals("0003") || ddd.equals("0004") || ddd.equals("0005") || ddd.equals("0006") || ddd.equals("0007") || ddd.equals("0008") || ddd.equals("0009")) {
                ddd = "erroDDD";
                //System.out.println(line);

                bfWriter.write(codigoEscob + " - " + operacao + " - " + cpfCnpj + "-" + dataAcionamento + " - " + status + "-" + ddd + "-" + telefoneContatado + "-" + codigoClassifStatus);
                bfWriter.newLine();
            }


        }

//fecha a leitura do arquivo
inReader.close();
//fecha a gravação no arquivo
bfWriter.close();

    } catch (IOException e) {
        System.err.println(e.getMessage());
    }
    return Leitura();

}[/b]

Preciso passar esse metodo para um comandButon na minha pagina jsp para que a rotina do método seja executada mas não está funcionando, o trecho da minha pagina jsp que estou tentando implementar o metodo é este:

<ice:commandButton value=“Processar arquivo” action="#{LeituraArquivoMb.Leitura}"></ice:commandButton>

A unica coisa que está faltando para a aplicação ser finalizada é que esse metodo funcione.

Alguem pode me ajudar?

Ele não deve estar funcionando porque você não especificou o “path” completo do arquivo. Como você deve saber, em uma página JSP, o diretório corrente não é o que você está imaginando e sim um outro qualquer. Como isso depende de web server para web server (eu não vou dizer que no caso do Tomcat o diretório corrente costuma ser o do “start.sh” e “shutdown.sh” do Tomcat), é melhor especificar esse nome de arquivo em alguma configuração do seu site (talvez criando uma entrada em web.xml), e pegar esse nome na configuração.

consegui fazer o metodo funcionar, mas o que ocorre agora é um StackOverFlowerror na execução do metodo

javax.faces.FacesException: #{LeituraArquivoMb.Leitura}: java.lang.StackOverflowError
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
javax.faces.component.UICommand.broadcast(UICommand.java:383)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:17)
com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:54)
com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:42)
com.icesoft.faces.webapp.http.core.ViewBoundServer.service(ViewBoundServer.java:65)

[b]root cause

javax.faces.el.EvaluationException: java.lang.StackOverflowError
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
javax.faces.component.UICommand.broadcast(UICommand.java:383)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:17)
com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:54)
com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:42)
com.icesoft.faces.webapp.http.core.ViewBoundServer.service(ViewBoundServer.java:65)[/b]

não sei se ele está gerando recursividade no metodo e por isso está causando esse erro, o engraçado é que no metodo main executando essa classe vai de boa.