laço problema concatenação strings

13 respostas
S

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.

13 Respostas

S

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

pedruhenrik
  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,

S

Cara é que nao sei como descrever esta duvida mal!

pedruhenrik

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,

S
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!

pedruhenrik
for (int i = 0; i &lt; lista.size(); i++) {  
               beans = lista.get(i).getLinha();  
               System.out.println(&quot;beans = &quot;+beans);  
                 
           }

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,

S

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

S

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

pedruhenrik
for (int c = 0; c &lt; tb.getRowCount(); c++) {  
           for (int i = 0; i &lt; lista.size(); i++) {  
               beans = lista.get(i).getLinha();  
               System.out.println(&quot;beans = &quot;+beans);  
                 
           }  
       }

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

att,

S

e agora me lasquei?

ruivo


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

samuelM:
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!

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();
        }
    }
S

vlw rabugento deu certo

pedruhenrik

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

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,

Criado 31 de janeiro de 2012
Ultima resposta 2 de fev. de 2012
Respostas 13
Participantes 3