Noite,
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.
JFileChooser SelecionarArquivoDialog = new JFileChooser();
SelecionarArquivoDialog.setMultiSelectionEnabled(true);
SelecionarArquivoDialog.showOpenDialog(this);
File file = SelecionarArquivoDialog.getSelectedFile();
String linha = new String();
String nomedoarquivo = file.getPath();
File arq = new File(nomedoarquivo);
while (arq.exists()) {
try {
FileReader leitorDeArquivo = new FileReader(nomedoarquivo);
BufferedReader bufferDeArquivo = new BufferedReader(leitorDeArquivo);
while (true) {
linha = bufferDeArquivo.readLine();
if (linha == null) {
break;
}
String tipo = linha.split("\\|")[1];
if (tipo.equals("0000")) { //aqui faz o que preciso
if (tipo.equals("0001")) { //aqui faz o que preciso
}
}
} catch (FileNotFoundException ex) {
JOptionPane.showMessageDialog(this, "Erro aqui" + ex);
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Erro aqui 2" + ex);
}
}
Como posso resolver isso? Conseguem me ajudar?
Boa noite,
Tenta utilizar um FileReader para cada arquivo txt, exemplo:
public static void main(String[] args) {
try {
FileReader txt1 = new FileReader("Clientes.txt"); //NOME DO ARQUIVO PARA LEITURA
FileReader txt2 = new FileReader("Produtos.txt"); //NOME DO ARQUIVO PARA LEITURA
Scanner scan = new Scanner(txt1); //O SCANNER IRÁ FAZER UMA VARREDURA NO ARQUIVO
while (scan.hasNextLine()) { //O MÉTODO hasNextLine() SÓ PARA QUANDO CHEGA NA ULTIMA LINHA
System.out.println(scan.nextLine());
}
scan = new Scanner(txt2);
while (scan.hasNextLine()) { // AQUI COMEÇA A LEITURA DO SEGUNDO ARQUIVO
System.out.println(scan.nextLine());
}
} catch (FileNotFoundException e) {
System.out.println("ARQUIVO NÃO ENCONTRADO"); //CASO NÃO ENCONTRE OU O NOME DO ARQUIVO ESTEJA INCORRETO, APARECERÁ ESSA MENSAGEM
}
}
Veja a saída no meu console:
Agora se quiser ler os dois arquivos ao mesmo tempo, aí eu recomendo utilizar Threads.
1 curtida
Dá uma olhada no que você está fazendo:
JFileChooser SelecionarArquivoDialog = new JFileChooser();
SelecionarArquivoDialog.setMultiSelectionEnabled(true); // permite multipla seleção
SelecionarArquivoDialog.showOpenDialog(this); // não está verificando o retorno do método
File file = SelecionarArquivoDialog.getSelectedFile(); // embora tenha optado por multipla seleção, só está pegando 1 arquivo
String linha = new String(); // desperdiçando memória
String nomedoarquivo = file.getPath(); // desperdiçando memória
File arq = new File(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 while
try {
FileReader leitorDeArquivo = new FileReader(nomedoarquivo);
BufferedReader bufferDeArquivo = new BufferedReader(leitorDeArquivo);
while (true) {
linha = bufferDeArquivo.readLine();
if (linha == null) {
break;
}
String tipo = linha.split("\\|")[1];
if (tipo.equals("0000")) { // aqui faz o que preciso
}
if (tipo.equals("0001")) { // aqui faz o que preciso
}
}
} catch (FileNotFoundException ex) {
JOptionPane.showMessageDialog(this, "Erro aqui" + ex);
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Erro aqui 2" + ex);
}
}
Tenta assim:
try {
JFileChooser selecaoArquivosDialog = new JFileChooser();
selecaoArquivosDialog.setMultiSelectionEnabled(true);
int opcao = selecaoArquivosDialog.showOpenDialog(this);
if (opcao == JFileChooser.APPROVE_OPTION) {
File[] arquivosSelecionados = selecaoArquivosDialog.getSelectedFiles();
for (File arquivo : arquivosSelecionados) {
List<String> linhas = Files.readAllLines(arquivo.toPath());
for (String linha : linhas) {
String tipo = linha.split("\\|")[1];
if (tipo.equals("0000")) {
// aqui faz o que preciso
}
if (tipo.equals("0001")) {
// aqui faz o que preciso
}
}
}
}
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "Erro aqui " + e);
}
1 curtida
Dessa forma é complicado porque preciso que importe mais que dois arquivos também.
Nossa, perfeito, funcionou certinho, estou conseguindo importar os arquivos. Muito obrigado…
2 curtidas