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