Ler vários txt. ao mesmo tempo

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, :coffee:

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