Importar .txt para JTexts

Gostaria de saber como posso fazer uma importação de um arquivo .txt para os JTexts de uma tela, fiz o seguinte método:

File arquivo = fc.getSelectedFile(); -> aqui ele pega o arquivo .txt do meu JFileChooser.

try{

 FileReader fr = new FileReader(arquivo);
 BufferedReader br = new BufferedReader(fr);
 
 Object[] lines = br.lines().toArray();
    
    for (int i=0; i<lines.length;i++) {

        String[] data = lines[i].toString().split(" ");
        String linha1 = data[0];
        String linha2 = data[1]; ---> o erro dá nessa linha(o documento tem linhas em branco tmbm
        String linha3 = data[2];
        String linha4 = data[3];
        String linha5 = data.length == 6 ? data[5] :"";

numOcorrencia.setText(linha1);
titulo.setText(linha2);
dataOcocrrencia.setText(linha3);
tipoOcorre.setSelectedItem(linha4);
prioriOcorrencia.setSelectedItem(linha5);

}catch(IOException erro){

}

Porém está dando erro de Vetor:

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1

Não consigo descobrir porque ele ta parando no vetor 1

Amigo da um print em Data ou em lines, para saber como está os dados que você quer mexer.
Sobre seu codigo:

String linha1 = data[0];
String linha2 = data[1]; —> o erro dá nessa linha(o documento tem linhas em branco tmbm
String linha3 = data[2];
String linha4 = data[3];
String linha5 = data.length == 6 ? data[5] :"";

você consegue fazer um FOR para rodar no objeto todo FOR IN no Java se não me engano

não entendi o que quis dizer, dá print onde?

System.out.println(lines) ou System.out.println(data)
É sempre importante saber como os dados está sendo trazido para que você possa trata-los da forma correta.

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
Não consigo descobrir porque ele ta parando no vetor 1

É como se a sua separação do documento .TXT para um array não esta funcionando, tenta fazer o split antes de add ele no Array, segue codigo:

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
public class JavaExample {
    public static void main(String args[]){
     String num = "22,33,44,55,66,77";
     String str[] = num.split(",");
     List<String> al = new ArrayList<String>();
     al = Arrays.asList(str);
for(String s: al){
   System.out.println(s);
    }
    }
 }
Output:

22
33
44
55
66
77

Ah ta entendi, então deve ser como meu arquivo ta salvo. Eu fiz a parte de salvar em .txt, e o java salva assim:

1
GDRFGFGDFGDFG
10/09/2020
Chapa Fora de Milimetragem
Prioridade Média
1254
2526
1
5700850063
WDASFSFDF
Isabela e Maitê Joalheria ME
FDSGFDGFG

Será que é por ta assim e não por ter vírgula depois das palavras?

Isso Alyesson a forma como arquivo ta salvo vai mudar a forma que você tem que fazer o split.
Lembrando que: se o seu array for 2D (linhas e colunas) você terá que usar dois split, um para linhas e dentro da linha voce terar que fazer um for para salvar as colunas na linha.

se você estiver usando o java para salvar esse .txt, poe para quando for salvar as colunas add virgula.

Lembrando também que “\n” = Enter ou NewLine e " " = Backspace

Tenta usar:
String[] data = lines[i].toString().split("\n");

Eu arrumei a parte que salva o .txt, coloquei pra salvar com vírugula, agors ele salva com vírgula após o fim de cada linha.

Modifiquei o código, porém dá o mesmo erro ainda, eu fiz assim:

try{
FileReader fileReader = new FileReader(arquivo);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String linha = “”;

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

        while ((linha = bufferedReader.readLine()) != null) {
            System.out.println(linha);
            if (linha != null && !linha.isEmpty()) {
                result.add(linha);
            }
        }
        fileReader.close();
        bufferedReader.close();

        for (String s : result) {

            String[] leLinhas = s.split(";");
            
         String linha1 = leLinhas[0];
         String linha2 = leLinhas[1];
         String linha3 = leLinhas[2];
         String linha4 = leLinhas[3];
         String linha5 = leLinhas[4];
         String linha6 = leLinhas[5];

    numOcorrencia.setText(linha1);
    titulo.setText(linha2);
    dataOcocrrencia.setText(linha3);
    tipoOcorre.setSelectedItem(linha4);
    prioriOcorrencia.setSelectedItem(linha5);

Ele consegue armazenar certinho as informações, no OutPut sai assim:

1;
GDRFGFGDFGDFG;
10/09/2020;
Chapa Fora de Milimetragem;
Prioridade Média;
1254;
2526;
1;
5700850063;
WDASFSFDF;
Isabela e Maitê Joalheria ME;
FDSGFDGFG;
;

Mas ainda tá dando o erro: Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1

Dá no mesmo lugar, no vetor [1].

Alyesson tenta a função em result toArray:

System.out.println(result.toArray()[Index que você quiser])

String[] newarray = result.toArray(new String[result.size()]); // conversão de Object[](retorno da função toArray) para String[]

Descobri que o erro ta dando aqui:

while ((linha = bufferedReader.readLine()) != null) {
// System.out.println(linha);
if (linha != null && !linha.isEmpty()) {
result.add(linha); ------> É aqui que o erro ta acontecendo, parece que tem algo errado no formado do arquivo(não sei bem)
}else{
JOptionPane.showMessageDialog(null,“Erro “+result,””,JOptionPane.WARNING_MESSAGE );
}
}

O erro que mostra no JOption é

Olá Matheus,

Obrigado pela tua ajuda. Consegui resolver o problema, o meu último código estava certo mesmo, o problema era o arquivo… quando eu salvava ele em .txt eu fiz:

escreveArquivo.println(numOcorrencia.getText()+ “;”);
escreveArquivo.println(titulo.getText()+ “;”);

e tinah que ser com .print só, apenas a última linha tinha que ser como println. ai ele salvou assim:

1;GDRFGFGDFGDFG;10/09/2020;Chapa Fora de Milimetragem;Prioridade Média;1254;2526;1;5700850063;WDASFSFDF;Isabela e Maitê Joalheria ME;FDSGFDGFG;;;AAAAAAAAGGGGGGGGG 22222 ahhau ajhjahj ajh aja jajahgjj aj aj ajjjggduwg d dksj jkhsjffeu sc usfyuk f;pedro.m;Dilma Rousself

o que é o correto.

o código correto ficou assim:

JFileChooser fc = new JFileChooser();
int res = fc.showOpenDialog(null);
if (res == JFileChooser.APPROVE_OPTION) {
File arquivo = fc.getSelectedFile();
try{
FileReader fileReader = new FileReader(arquivo);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String linha="";

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

        while ((linha = bufferedReader.readLine()) != null) {
            if (linha != null && !linha.isEmpty()) {
                result.add(linha);
            }else{
               JOptionPane.showMessageDialog(null,"Erro ao ler arquivo .txt "+result,"",JOptionPane.WARNING_MESSAGE );
            }
        }
        fileReader.close();
        bufferedReader.close();

        for (String s : result) {
            
            String[] leLinhas = s.split(";");
            
            String linha1 = leLinhas[0];
            String linha2 = leLinhas[1];
            String linha3 = leLinhas[2];
            String linha4 = leLinhas[3];
            String linha5 = leLinhas[4];
            String linha6 = leLinhas[5];

    /*---Aqui imprimimos a linha---*/
            numOcorrencia.setText(linha1);
            titulo.setText(linha2);
            dataOcocrrencia.setText(linha3);
            tipoOcorre.setSelectedItem(linha4);
            prioriOcorrencia.setSelectedItem(linha5);

}
}catch (IOException erro) {
JOptionPane.showMessageDialog(null,“Erro ao ler arquivo .txt, tente novamente “+erro,””,JOptionPane.ERROR_MESSAGE);
}
}else{
}

1 curtida