Problema com arquivo .dat ( na verdade eh um .txt* )[Dúvida Re-aberta] (post no vacuo xD)

Gente… meu problema se estende numa coisa…
Tenhu este arquivo:
Mdps.dat

animal backbone animal leg bone Bark black animal tail fur bronze cinnamon wood cooper crystal stone hp water insect feeler insect leg insect wing Iron thread limbid skin maple wood misian plant seed Pollen
( parei a lista aqui no pollen pois o arquivo tem 452 linhas :lol: )

pois bém… o que é meu problema:
preciso pegar cada linha e colocar numa posição num vetor:

private String[] Mdps;

O que no caso ficaria mais ou menos assim depois de pronto…

Mdps = {"animal backbone", "animal leg bone", "Bark", "black animal tail fur", "bronze"};
e assim vai… (como eu disse são 452 linhas ao todo.)

felizmente me ocorreu um erro na minha tentativa… pela lógica deveria dar certo. porque não deu!?

File db = new File("c:\RB Evo DropList\Data\Mdps.dat");

if(db.exists()){
    try{
            FileReader arquivoMdps = new FileReader(db);
            BufferedReader buffRead = new BufferedReader(arquivoMdps);
                
            while ((temp = buffRead.readLine()) != null) {   
                for(int i=0; i<buffRead.readLine().length(); i++){
                    Mdrops5[i] = temp;
                }
            }
            F.setMyString(Mdrops5);
        }catch(IOException e){
            
        }
    }
}

a parte em que eu leio cada linha e passo pro vetor em cada posição o nome de cada linha, deveria estar certo.
O compile deu erro aqui:

Mdrops5[i] = temp;

Você não pode fazer dessa maneira. O correto é algo como:

private String[] Mdps;

File db = new File("c:\RB Evo DropList\Data\Mdps.dat");

if(db.exists()){
    try{
            FileReader arquivoMdps = new FileReader(db);
            BufferedReader buffRead = new BufferedReader(arquivoMdps);
            List<String> linhas = new ArrayList<String>();
            String linha; // não use nomes como "temp"...
            while ((linha = buffRead.readLine()) != null) {   
                linhas.add (linha);
            }
            buffRead.close();
            Mdps = (String[]) linhas.toArray();
            F.setMyString(Mdps);
        }catch(IOException e){
            e.printStackTrace(); // pelo menos para saber que houve erro, não?
        }
    }
}

Vc não deveria fazer um new em Mdps?

Mdps = new String[de quanto?]

Ele não sabe o número de linhas. Num caso desses, é melhor fazer como eu fiz (criar um ArrayList<String> para armazenar as linhas).

É msm thingol, depois de analisar o codigo dele a primeira coisa que veio na cabeça foi a falta do new.
Do jeito que vc colocou é melhor pois servirá para qq tamanho(qtd de linhas) de .txt
:roll:

Aqui… estou fazendo como vc me colocou… mas o netbeans ta relatando erro aqui:

List<String> linhas = new ArrayList<String>();

ele diz:
Type java.awt.List does not take parameters

O netBeans ja adiciona automaticamente os import de cada classe.

Troque “import java.awt.List” por “import java.util.List”.

tu deve ter estudado muito. eu ainda sou iniciante pelo conhecimento que tenhu em java. mas vamos lá. como diz o ditado… uma mão lava a outra.

init: deps-jar: Compiling 1 source file to C:\projeto alpha\RB Evo DropList\build\classes compile: run: Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; at rbevodroplist.Main.main(Main.java:42) Java Result: 1 BUILD SUCCESSFUL (total time: 2 seconds)
compile novamente relatou o erro… e adivinha so!? na mesma linha… aonde o Mpds recebe.

Mdps = (String[]) linhas.toArray();

com o codigo certin, vou dar uma estudada aprofundada nisso. :wink:
e agora!? que erro é este!? :frowning:

Hum, desculpe, acho que o certo é então:

Mdps = linhas.toArray(new String[0]); 

(Não tinha testado o código antes :stuck_out_tongue: )

tu é dez. :slight_smile: :-o :smiley:
vou estudar arraylist e a util.list.
isso pode me salvar mais tarde em outras aplicações…

vlw mesmo.
[ Resolvido ]

Tem 18h que ando lendo a respeito sobre arquivos, List e arrayList… mas to quebrando a cbeça nisso… tentei solucionar sozinho, inventei codigo, mas no final acabei que estou recorrendo a comunidade novamente.

como foi me esclarecido:

[code]package rbevodroplist;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import javax.swing.JFrame;

/**

  • @author plinio
  • @Email pjrm123@gmail.com
    /
    public class Main {
    private static String []Mdrops5;
    /
    *
    • @param args the command line arguments
      */
      public static void main(String[] args){

      File db = new File(“c:\RB Evo DropList\Data\Mdps.dat”);
      Fonte F = new Fonte();

      String temp;
      if(db.exists()){
      try{
      FileReader arquivoMdps = new FileReader(db);//diretorio do Mdps.dat
      BufferedReader buffRead = new BufferedReader(arquivoMdps);

           List<String> linhas = new ArrayList<String>();
           String linha;
           while ((linha = buffRead.readLine()) != null) {     
               linhas.add(linha);   
           }   
           buffRead.close();   
           Mdrops5 = linhas.toArray(new String[0]);   
           F.setMyString(Mdrops5);
       }catch(IOException e){
           e.printStackTrace();
       }
      

      }

      F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      F.setVisible(true);
      F.setResizable(false);
      F.setSize(300, 400);
      }
      }[/code]
      Este é o meu primeiro arquivo… O segundo não vou postar pois é meio grande, mas dá pra interpretar o meu problema falando daqui em diante.

a leitura deste arquivo que abro, está caindo no segundo arquivo. Nele estou salvando numa JComboBox.
tudo bem… primeira pergunta:

  1. Apos fazer isso:

public void setMyString(String[] aeee){ Mdrops = aeee; mateDrops.setModel(new DefaultComboBoxModel(Mdrops));// <---- apos fazer isto aqui.... }
há como fazer edição!? digo… poder adicionar uma opção para edição. poder adicionar itens ao JComboBox. Isto é… ele recebeu a lista de nomes, mas gostaria de poder fazer adições.

  1. De acordo com a pergunta acima… como eu poderia fazer para salvar no meu arquivo Mdps.dat a modificação feita no JComboBox!? :

animal backbone animal leg bone Bark black animal tail fur bronze cinnamon wood cooper crystal stone hp water insect feeler insect leg insect wing Iron thread limbid skin etc....

Agora o pior de todos os problemas…
3. Criando uma nova .class para o pacote (visto no meu primeiro arquivo la encima “package rbevodroplist;”), quero poder fazer o salvamento da modificação por esta .class*
OBS.: no caso, este arquivo estaria sempre com os dados dos arquivos abertos na memoria para qualquer modificação. (eu disse arquivo é porque apos saber como gravar os dados dessa maneira irei aplicar a mais 15 arquivos paralelos e aleatorios…)

Se alguem puder me ajudar com a minha dor de cabeça… hehehe, Agradeceria muito.