Estou travado nisso faz uns três dias. Tenho um código onde consigo ler um arquivo .txt e pegar algumas informações das linhas deste arquivo. Porém, não estou conseguindo fazer funcionar para ler mais de um arquivo ao mesmo tempo. Tentei utilizar o ‘while’ mas fica lendo os arquivos selecionados infinitamente.
Stringlinha=newString();Stringnomedoarquivo=file.getPath();Filearq=newFile(nomedoarquivo);while(arq.exists()){try{FileReaderleitorDeArquivo=newFileReader(nomedoarquivo);BufferedReaderbufferDeArquivo=newBufferedReader(leitorDeArquivo);while(true){linha=bufferDeArquivo.readLine();if(linha==null){break;}Stringtipo=linha.split("\\|")[1];if(tipo.equals("0000")){//aqui faz o que precisoif(tipo.equals("0001")){//aqui faz o que preciso}}}catch(FileNotFoundExceptionex){JOptionPane.showMessageDialog(this,"Erro aqui"+ex);}catch(IOExceptionex){JOptionPane.showMessageDialog(this,"Erro aqui 2"+ex);}}
Tenta utilizar um FileReader para cada arquivo txt, exemplo:
publicstaticvoidmain(String[]args){try{FileReadertxt1=newFileReader("Clientes.txt");//NOME DO ARQUIVO PARA LEITURA FileReadertxt2=newFileReader("Produtos.txt");//NOME DO ARQUIVO PARA LEITURAScannerscan=newScanner(txt1);//O SCANNER IRÁ FAZER UMA VARREDURA NO ARQUIVOwhile(scan.hasNextLine()){//O MÉTODO hasNextLine() SÓ PARA QUANDO CHEGA NA ULTIMA LINHASystem.out.println(scan.nextLine());}scan=newScanner(txt2);while(scan.hasNextLine()){// AQUI COMEÇA A LEITURA DO SEGUNDO ARQUIVOSystem.out.println(scan.nextLine());}}catch(FileNotFoundExceptione){System.out.println("ARQUIVO NÃO ENCONTRADO");//CASO NÃO ENCONTRE OU O NOME DO ARQUIVO ESTEJA INCORRETO, APARECERÁ ESSA MENSAGEM}}
Agora se quiser ler os dois arquivos ao mesmo tempo, aí eu recomendo utilizar Threads.
Solucao aceita
staroski1 like
Dá uma olhada no que você está fazendo:
JFileChooserSelecionarArquivoDialog=newJFileChooser();SelecionarArquivoDialog.setMultiSelectionEnabled(true);// permite multipla seleçãoSelecionarArquivoDialog.showOpenDialog(this);// não está verificando o retorno do métodoFilefile=SelecionarArquivoDialog.getSelectedFile();// embora tenha optado por multipla seleção, só está pegando 1 arquivoStringlinha=newString();// desperdiçando memóriaStringnomedoarquivo=file.getPath();// desperdiçando memóriaFilearq=newFile(nomedoarquivo);// desperdiçando memória, você já tem o arquivo selecionado, pra que criar outro?while(arq.exists()){// em qual momento o arquivo vai deixar de existir? se ele não for apagado, nunca vai sair desse whiletry{FileReaderleitorDeArquivo=newFileReader(nomedoarquivo);BufferedReaderbufferDeArquivo=newBufferedReader(leitorDeArquivo);while(true){linha=bufferDeArquivo.readLine();if(linha==null){break;}Stringtipo=linha.split("\\|")[1];if(tipo.equals("0000")){// aqui faz o que preciso}if(tipo.equals("0001")){// aqui faz o que preciso}}}catch(FileNotFoundExceptionex){JOptionPane.showMessageDialog(this,"Erro aqui"+ex);}catch(IOExceptionex){JOptionPane.showMessageDialog(this,"Erro aqui 2"+ex);}}
Tenta assim:
try{JFileChooserselecaoArquivosDialog=newJFileChooser();selecaoArquivosDialog.setMultiSelectionEnabled(true);intopcao=selecaoArquivosDialog.showOpenDialog(this);if(opcao==JFileChooser.APPROVE_OPTION){File[]arquivosSelecionados=selecaoArquivosDialog.getSelectedFiles();for(Filearquivo:arquivosSelecionados){List<String>linhas=Files.readAllLines(arquivo.toPath());for(Stringlinha:linhas){Stringtipo=linha.split("\\|")[1];if(tipo.equals("0000")){// aqui faz o que preciso}if(tipo.equals("0001")){// aqui faz o que preciso}}}}}catch(IOExceptione){JOptionPane.showMessageDialog(this,"Erro aqui "+e);}
A
AlisonR
Dessa forma é complicado porque preciso que importe mais que dois arquivos também.
A
AlisonR2 likes
Nossa, perfeito, funcionou certinho, estou conseguindo importar os arquivos. Muito obrigado…