Carregar um arquivo num ArrayList [RESOLVIDO]

Estou com problemas para carregar um arquivo num array. Eu tenho um arquivo onde ficam gravados os dados de produtos. Eu tenho problema quando tento abrir o arquivo e colocá-lo no arraylist de produtos. Eu coloquei o código no construtor da gui para ele ser carregado quando eu executar o programa.

[code]public static void abre() {
File file;
FileReader fr;
BufferedReader br;
StringTokenizer token;
String linha;
//variáveis que vão armazenar o nome, o estoque e o preço respectivamente
String nome;
int quantidade;
double preco;

    file = new File("produtos.txt");

    try {
        //Se o arquivo que eu estiver tentando abrir para leitura não existir
        //Eu o crio
        if(!file.exists()) {
            file.createNewFile();
        }

        fr = new FileReader(file);
        br = new BufferedReader(fr);
        token = new StringTokenizer(",");
        linha = br.readLine();

        while(linha != null) {
            nome = token.nextToken();
            quantidade = Integer.parseInt(token.nextToken());
            preco = Double.parseDouble(token.nextToken());

            lista.add(new Produto(nome, quantidade, preco));
            linha = br.readLine();
        }
        br.close();

    } catch (IOException e) {
        JOptionPane.showMessageDialog(null, "Erro ao carregar o arquivo", "Erro", JOptionPane.ERROR_MESSAGE);
    }
}[/code]

Dá algum erro? o que acontece?

erro por favor!!! rss

bem eu tentaria fazer algo bem simples… tipo…

...
       fr = new FileReader(file);  
       br = new BufferedReader(fr);  
 
       while((linha = bf.readLine()) != null){
            
            //isso aqui faz ele separar e colocar cada pedaçinho em uma posição do Array
            String[] token = linha.split(","); 

           Produto prod = new Produto(token[0], //nome
                                      Integer.parseInt(token[1]), //qtde 
                                      Double.parseDouble(token[2]) //preço
           );
 
            lista.add(prod);  

        }  
        br.close();  
...

Fala o erro que dá aí…
Ou simplesmente não carrega?

Tarefa de Casa … =) ,
Porem se ele nao falar o que acontece nao poderemos lhe ajudar .

Lança essa exceção:

Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(StringTokenizer.java:332) at projeto.Produto.abre(Produto.java:136) at projeto.Gui.jMenuItem3ActionPerformed(Gui.java:297) at projeto.Gui.access$400(Gui.java:18) at projeto.Gui$5.actionPerformed(Gui.java:174) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.AbstractButton.doClick(AbstractButton.java:357) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1170) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1211) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Eu tenho que carregar os produtos do arquivo num ArrayList de produtos. O arquivo é “produtos.txt”, e está gravado da seguinte maneira:

LEITE CAIXA,15,2.95
LEITE EM PO,30,4.50
LEITE LATA,22,7.00
COCA COLA LIGHT,50,4.00
COCA COLA 2L,80,3.50
COCA COLA 1.5L,80,3.00
COCA COLA KS,30,2.50
DETERGENTE,50,1.25
BISCOITO PASSATEMPO,26,1.50
BISCOITO DE MORANGO,22,1.10
BISCOITO DE CHOCOLATE,26,1.20
BISCOITO MARIZA,21,0.90
MACARRAO MARIZA,60,2.00
MACARRAO TIA JOANA,45,2.50
MACARRAO LICOSA,14,2.20
MACARRAO HILEIA,45,3.00
ARROZ HILEIA,37,5.00
ARROZ MARGARITA,45,2.00
ARROZ TOSCANO,45,2.20
FEIJAO MARIA,22,4.50
FEIJAO DONOSSO,76,5.00
FEIJAO GL,45,6.00
FEIJAO VERDE,35,5.50
CAFE HILEIA,44,2.20
CAFE MARATA,29,3.00
CAFE MARIZA,27,1.90
CAFE UNIAO,45,2.30
CAFE DO NOSSO,22,2.45
CAFE DIARIO,45,1.98
TRIGO MARIA JOANA,77,1.50
TOMATE KG,20,5.00
BANANA KG,50,3.00
GOIABA KG,20,7.00
CEBOLA KG,90, 1.50
MELANCIA KG,20,6.00
ABACATE,26,1.50
LARANJA,30,4.00
BOMBRIL,46,0.90
VASSOURA,20,3.00
QUEIJO MUSSARELA,40,4.00
QUEIJO PRATO,2a0,3.0d0

Eu uso como token a vírgula e cada produto tem seu nome, quantidade no estoque e o preço, respectivamente.

Algumas dicas:
a) Desde o Java 5, você não deveria estar usando o StringTokenizer. Veja sobre a classe Scanner e o método split.
b) Você não deve declarar todas as variáveis no início. Isso você fazia no C, por causa de uma limitação da linguagem. É uma boa prática de programação declarar variáveis o mais próximo possível do local do seu uso, e no menor escopo possível.

Não testei, mas o código deve ficar parecido com isso:

[code]
public static void abre() {
Scanner in = null;
try {
//Se o arquivo que eu estiver tentando abrir para leitura não existir
//Eu o crio
File file = new File(“produtos.txt”);
if(!file.exists()) {
file.createNewFile();
}
in = new Scanner(file);

        while(in.hasNextLine()) {
            String linha = in.nextLine().split(",");
            
            String nome = linha[0];
            int quantidade = Integer.parseInt(linha[1]);
            double preco = Double.parseDouble(linha[2]);

            lista.add(new Produto(nome, quantidade, preco));
        }
    } catch (IOException e) {
        JOptionPane.showMessageDialog(null, "Erro ao carregar o arquivo", "Erro", JOptionPane.ERROR_MESSAGE);
    } finally {
        if (in != null) in.close();
    }       
}[/code]

Poxa, valeu! Resolveu meu problema! Agradeço a vc e a todos que tentaram me ajudar.