laço problema concatenação strings

Ola pessoas estou quase ficando maluco para fazer uma parada aqui mas ta complicado ;/
veja meu codigo

 File dir = new File("C:\\lista");
    File arq = new File(dir, "User.txt");
    FileWriter fileWriter;
    PrintWriter printWriter = null;
        try {
            fileWriter = new FileWriter(arq, false);
            printWriter = new PrintWriter(fileWriter);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    
    
    //String beans = "";

    for (int c = 0; c < tb.getRowCount(); c++) {
        try {
            List<Contato> lista = dao.gerar(tb.getValueAt(c, 1).toString());
            for (int i = 0; i < lista.size(); i++) {
                String beans = lista.get(i).getLinha();
                System.out.println("beans = "+beans);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

o que faz este código pega informações da dao, criei um arquivo do tipo File.
Veja que tenho esta linha

System.out.println("beans = "+beans);

ele percorre o for umas 25 vezes + ou - da um print de umas 25 linhas das informações do banco certinho
so que precisava pegar essas 25 linhas que vem do banco e gravar em um arquivo .txt

pra isso tenho esse codigo

printWriter.print 

porem nao sei aonde colocar pq se eu colocar dentro do for ele vai jogar no txt apenas a ultima linha da consulta!! e preciso que retorne todas as linhas da consulta em um .txt

Alguem sabe o que posso fazer para sanar este problema?

Obrigado pela atenção.

o problema deve estar vindo aqui

String beans = lista.get(i).getLinha();

eu crio uma variavel e falo que ela vai se igual a o que percorrer naquele momento mas como fazer pra pegar o valor de todas os retornos em uma variavel

  1. Sobre o titulo do seu post http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor . Pf use uma breve descrição sobre o problema.

  2. vc declara uma string beans dentro do for, td vez q o laço for percorrido uma nova beans sera instanciada. crie a string fora do laço.

  3. se vc vai concatenar strings utilize stringBuilder ou stringBuffer.

att,

Cara é que nao sei como descrever esta duvida mal!

sussa, EU descreveria algo do tipo “laço problema concatenação strings” rsrs

mas acho q o q eu disse acima vc consegue resolver.

att,

 File dir = new File("C:\\lista");
    File arq = new File(dir, "User.txt");
    String beans = "";
    
    //String beans = "";

    for (int c = 0; c < tb.getRowCount(); c++) {
        try {
            List<Contato> lista = dao.gerar(tb.getValueAt(c, 1).toString());
            arq.createNewFile();
            FileWriter fileWriter = new FileWriter(arq, false);
            PrintWriter printWriter = new PrintWriter(fileWriter);
            
            for (int i = 0; i < lista.size(); i++) {
                beans = lista.get(i).getLinha();
                System.out.println("beans = "+beans);
                
            }
            printWriter.print(beans);
            printWriter.flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

corrigi veja agora falta concatenar pois ele so gera um arquivo com o ultimo retorno!

[code]for (int i = 0; i < lista.size(); i++) {
beans = lista.get(i).getLinha();
System.out.println("beans = "+beans);

       } [/code]

faltou o +=

for (int i = 0; i < lista.size(); i++) {
beans += lista.get(i).getLinha();
System.out.println("beans = " + beans);
}

mas novamente lhe digo, concatenar assim pode causar perda de desempenho, o recomendado é utilizar StringBuilder em alguns casos eu vi usarem StringBuffer.

att,

entao mas veja

for (int i = 0; i < lista.size(); i++) {
                beans += lista.get(i).getLinha();
                System.out.println("beans = "+beans);
                
            }

e ele retorno o primeiro resultado 25 vezes

assim

StringBuilder numeros = new StringBuilder();
            for (int i = 0; i < lista.size(); i++) {
                numeros.append(lista.get(i).getLinha());
            }
            System.out.println(numeros.toString().length());

            printWriter.print(numeros);
            printWriter.flush();

ele cria o txt apenas com o ultimo resultado da lista :frowning:

o problema esta sendo em cria um arquivo que contenha os resultados do laço for

[code]for (int c = 0; c < tb.getRowCount(); c++) {
for (int i = 0; i < lista.size(); i++) {
beans = lista.get(i).getLinha();
System.out.println("beans = "+beans);

       }  
   }[/code]

acho q o problema ta aqui, vc tem um for dentro do outro…

att,

e agora me lasquei?

Caramba... Galera não lê mesmo o código, nem mesmo pra ajudar

[quote=samuelM][code]
File dir = new File(“C:\lista”);
File arq = new File(dir, “User.txt”);
String beans = “”;

//String beans = "";

for (int c = 0; c < tb.getRowCount(); c++) {
    try {
        List<Contato> lista = dao.gerar(tb.getValueAt(c, 1).toString());
        arq.createNewFile();
        FileWriter fileWriter = new FileWriter(arq, false);
        PrintWriter printWriter = new PrintWriter(fileWriter);
        
        for (int i = 0; i < lista.size(); i++) {
            beans = lista.get(i).getLinha();
            System.out.println("beans = "+beans);
            
        }
        printWriter.print(beans);
        printWriter.flush();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

[/code]

corrigi veja agora falta concatenar pois ele so gera um arquivo com o ultimo retorno![/quote]

Cara, imaginando que a sua consulta é baseada na instrução

tb.getValueAt(c, 1)

Vc vai ter todos os contatos daquele seu item do TableModel (é isso né?)

Entretanto, para CADA item do seu TB, vc cria um NOVO arquivo com o MESMO NOME e MESMO PATH, sobrescrevendo o atual.
aqui

 for (int c = 0; c < tb.getRowCount(); c++) {
        try {
            List<Contato> lista = dao.gerar(tb.getValueAt(c, 1).toString());
            arq.createNewFile();
            FileWriter fileWriter = new FileWriter(arq, false);      <--- PROBLEMA AQUI, cria um novo FileWriter para o item
            PrintWriter printWriter = new PrintWriter(fileWriter); <-- PROBLEMA QUI, cria um novo PrintWriter para o item

...

Antes da próxima Iteração do laço, vc tem o arquivo certo. Entretanto, na próxima iteração do laço, vc perde tudo e só grava o atual. É por isso que vc só tem os dados do último.
Tente algo assim

 File dir = new File("C:\\lista");
    File arq = new File(dir, "User.txt");
    String beans = "";
    arq.createNewFile();
    FileWriter fileWriter = new FileWriter(arq, false);
    PrintWriter printWriter = new PrintWriter(fileWriter);
    
    //String beans = "";

    for (int c = 0; c < tb.getRowCount(); c++) {
        try {
            List<Contato> lista = dao.gerar(tb.getValueAt(c, 1).toString());
            StringBuilder builder = new StringBuilder();
            
            for (int i = 0; i < lista.size(); i++) {
                builder.append(lista.get(i).getLinha());
                System.out.println("beans = "+beans);
                
            }
            printWriter.print(builder.toString());
            printWriter.flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

vlw rabugento deu certo

[quote]<modo rabugento=“on”>
Caramba… Galera não lê mesmo o código, nem mesmo pra ajudar
</modo rabugento=“on”> [/quote]

oh rabugento foi mal ai, realmente só bati os olhos no código e não percebi esse “detalhe”.
eu vi q tinha algo estranho ali nos laços mas nem analisei.

att,