[RESOLVIDO]Gravar ArrayList

Olá!!!
Estou com dificuldade em mandar um arrayList para um arquivo excel.
O “out.write(bombas)” ele nao aceita.

Alguem sabe o que fazer? ou alguem tem alguma outro sugestao para mandar o ArrayList para um arquivo excel ou txt?

Obrigada!

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;

public class Bombas {

	public void Adiciona(String bomba) {
		ArrayList<String> bombas = new ArrayList<String>();
		bombas.add(bomba);
		System.out.println(bombas);
		
		try {

			FileWriter fstream = new FileWriter("c:/out.csv");

			BufferedWriter out = new BufferedWriter(fstream);

			out.write(bombas);

			out.close();

		} catch (Exception e) {

			System.err.println("Erro: " + e);

		}

	}

	
}

O método ‘write’ não aceita o Array como parâmetro, você deve antes transformar o seu array em String, ou iterar sobre esse Array e pra cada elemento do array você faz o ‘write’… assim:

             out.write(bombas.toString());// converte em String e adiciona

for (String bombaAux : bombas) { // ou adiciona uma por uma... out.write(bombaAux); }

1 curtida

Qual o erro que apresenta?

De qualquer jeito vc precisa tratar sua saida pois o padrão CSV usa “;” para tabulação.

Se seu código só for este ai mesmo, não tem como funcionar.

Tem “N” formas mas seguindo sua idéia, faz um for percorrendo cada item de sua lista e para da item vc chama o um metodo gravar que seria a parte entre try{…}catch(…){}.

Para escrever arquivos de texto, use a classe PrintWriter.

Valeu!!!
Estou com any duvidas, vou formular melhor e depois expo-las aqui!!!

Eu já fiz um sisteminha para faculdade que eu tratava uns dados estatististicos e este sistema conseguia exportar os dados para excel no padrao CSV.

Tenta fazer ai! Qualquer coisa avisa.

Aliás, você está fazendo arquivos Excel? Estude sobre essa API da Apache:
http://poi.apache.org/

O programinha é o seguinte,
tenho dados que os coloca no console, até ai eu consegui fazer.
Mas, meu problema começou quando fui tentar exporta-los para um arquivo excel.
Eu queria que tudo que eu printasse no console fosse para um arquivo ou txt ou excel.
Ja me falaram sobre essa poi, já olhei, mas nao consegui me familiarizar…

Tudo o que você digita no console ou tudo que é impresso no console?
Tipo assim:

Digite um número:
[color=green]13[/color]
Digite um nome:
[color=green]pedro[/color]

O que você quer que grave no .txt?

[quote]13
pedro[/quote]
Ou[quote]Digite um número:
13
Digite um nome:
pedro
[/quote]

Tudo que aparece no console:

‘13
Pedro’

Tem como?

[quote=marcelo.bellissimo]Aliás, você está fazendo arquivos Excel? Estude sobre essa API da Apache:
http://poi.apache.org/[/quote]
Essa biblioteca é realmente excelente, mas para o caso dele, que está gerando arquivos em CSV (texto puro) ela não é necessário (só complicaria mais ainda).

Entao, é uma coisa beeeem simples,
como eu gravo do console pro excel?

Nos ajuda se você disser:

  1. Que dados devem ir no excel? Será apenas 1 única coluna, ou várias?
  2. Como são os dados que estão na String bomba?

Assim, no excel deve ir apenas uma coluna, com as varias linhas que aparecem no console, se isso for possivel.

Tenho um array bomba
Um array rotor
Um array selo mecanico.

Eu peço para inserir o nome da bomba, com um equals vejo qual bomba devera ser fixada para imprimir no console.
Depois disso faço a combinação da bomba com os rotores e os selos mecanicos, que tambem sao Strings.

Dado um nome de bomba, faço todas as combinações possiveis com os outros arrays.

Coloquei o codigo abaixo, se for melhor para visualizar.

Eu quero depois que tenho printado no console, mandar os dados para um excel.

public class Bombas {

	public static void main(String[] args) {

		String[] bombas = new String[28];
		String[] rotor = new String[3];
		String[] selo = new String[4];

		bombas[0] = "MBD-111";
		bombas[1] = "MBD-112";
		bombas[2] = "MBD-113";
		bombas[3] = "MBD-114";
		bombas[4] = "MBD-1001";
		bombas[5] = "MBD-1002";
		bombas[6] = "MBD-1003";
		bombas[7] = "MBD-1004";
		bombas[0] = "MBD-1001/111";
		bombas[1] = "MBD-1002/111";
		bombas[2] = "MBD-1003/111";
		bombas[8] = "MBD-1011";
		bombas[9] = "MBD-1012";
		bombas[10] = "MBD-1013";
		bombas[11] = "MBD-1014";
		bombas[12] = "MBD-113";
		bombas[13] = "MBD-311";
		bombas[14] = "MBD-312";
		bombas[15] = "MBD-313";
		bombas[16] = "MBD-2001";
		bombas[17] = "MBD-2002";
		bombas[18] = "MBD-2003";
		bombas[19] = "MBD-2011";
		bombas[20] = "MBD-2012";
		bombas[21] = "MBD-2013";
		bombas[22] = "MBD-4001";
		bombas[23] = "MBD-4002";
		bombas[24] = "MBD-6001";
		bombas[25] = "MBD-6002";
		bombas[26] = "MBD-4501";
		bombas[27] = "MBD-4502";

		rotor[0] = "BRONZE";
		rotor[1] = "INOX";
		rotor[2] = "NODULAR";

		selo[0] = "BUNA-N";
		selo[1] = "VITON";
		selo[2] = "TEFLON";
		selo[3] = "EPDM";

		System.out.println("Digite o modelo da bomba:");
		Scanner teclado = new Scanner(System.in);
		String modelo = teclado.next();

		for (int b = 0; b < bombas.length; b++) {
			if (modelo.equals(bombas[b])) {
				for (int i = 0; i < rotor.length; i++) {

					for (int t = 0; t < selo.length; t++) {

						System.out.println("BOMBA " + bombas[b] + " ROTOR "
								+ rotor[i] + " SELO " + selo[t] + "\n");

					}

				}
			}
		}
	}
}

Notei que o modelo MBD-113 se repetiu nos índices 2 e 12 do seu array. Isso está certo? Deixei a repetição pois eu não sabia.

Abaixo, segue o exemplo com o PrintWriter. Testei aqui para a bomba MDB-111 funcionou certinho.
Troquei também o for tradicional pelo for each. E coloquei um break depois de imprimir os modelos, para evitar que ele continue a busca uma vez que já encontrou o modelo certo de bomba. Outra modificação foi o uso da instrução nextLine() no Scanner, que é o correto para esse caso.

[code]import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Bombas {

public static void main(String[] args) {
    String[] bombas = {
        "MBD-111", "MBD-112", "MBD-113", "MBD-114",
        "MBD-1001", "MBD-1002", "MBD-1003", "MBD-1004",
        "MBD-1001/111", "MBD-1002/111", "MBD-1003/111",
        "MBD-1011", "MBD-1012", "MBD-1013", "MBD-1014",
        "MBD-113", 
        "MBD-311", "MBD-312", "MBD-313",
        "MBD-2001", "MBD-2002", "MBD-2003", "MBD-2011", "MBD-2012", "MBD-2013",
        "MBD-4001", "MBD-4002",
        "MBD-6001", "MBD-6002",
        "MBD-4501", "MBD-4502"
    };

    String[] rotores = {"BRONZE", "INOX", "NODULAR"};

    String[] selos = {"BUNA-N", "VITON", "TEFLON", "EPDM"};

    System.out.println("Digite o modelo da bomba:");
    Scanner teclado = new Scanner(System.in);
    String modelo = teclado.nextLine();

    PrintWriter pw = null;
    try {
        pw = new PrintWriter(new File("C:\bombas.csv"));
        for (String bomba : bombas) {
            if (bomba.equals(modelo)) {
                for (String rotor : rotores) {
                    for (String selo : selos) {
                        pw.printf("BOMBA %s ROTOR %s SELO %s%n", bomba, rotor, selo);
                    }
                }
                System.out.println("Geração completa!");
                break;
            }
        }
    } catch (FileNotFoundException ex) {
        System.err.println("Não foi possível escrever no arquivo.");
        ex.printStackTrace();
        System.exit(1);
    } finally {
        if (pw != null) {
            pw.close();
        }
    }
}

}
[/code]

A partir do exemplo do Vinícius, o que você precisa fazer agora é mudar a linha 37 para que a formatação do arquivo seja de acordo com o formato CSV.

Para detalhes veja: http://pt.wikipedia.org/wiki/Comma-separated_values

Vinicius, deu certinho!!! Obrigada!!!

Só uma ultima duvida, desse jeito, ele grava pra mim em um arquivo, ai se eu rodo novamente a aplicação não dá, pois já consta na minha pasta o arquivo com esse nome, teria algum jeito de eu rodar quantas vezes eu quiser minha aplicação e ele ir gravando varios arquivos ou somente complementando o que já gravou?

Ahh…já consegui!!!
Ptz, muito obrigada mesmo!!!
Valeu!!!