Mesclar Múltiplos Arquivos Alternadamente

JavaBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como mesclar múltiplos arquivos de texto linha por linha, de forma alternada. Esta é uma tarefa comum no processamento de dados e gerenciamento de arquivos, onde pode ser necessário combinar o conteúdo de vários arquivos em um único arquivo.

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como preparar os arquivos de entrada necessários para o processo de mesclagem de arquivos
  • Como implementar uma função para mesclar o conteúdo dos arquivos de entrada
  • Como executar o processo de mesclagem de arquivos e verificar a saída

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Trabalhar com operações de I/O de arquivos em Java, incluindo leitura e escrita de arquivos
  • Usar as classes de arquivo e stream embutidas do Java para lidar com operações de arquivo
  • Implementar um algoritmo de mesclagem de arquivos personalizado para combinar o conteúdo de múltiplos arquivos
  • Testar e verificar a correção do processo de mesclagem de arquivos

Implementar a Função de Mesclagem

Nesta etapa, você implementará a função merge para mesclar o conteúdo dos arquivos de entrada.

  1. Abra o arquivo FileMerge.java no diretório /home/labex/project.

  2. Localize a função merge e substitua o código existente pela seguinte implementação:

public static void merge(String[] sourcePath, String outPath) throws IOException {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(outPath))) {
        BufferedReader[] readers = new BufferedReader[sourcePath.length];
        String[] currentLines = new String[sourcePath.length];
        boolean[] fileEmpty = new boolean[sourcePath.length];

        // Open readers for each source file
        for (int i = 0; i < sourcePath.length; i++) {
            readers[i] = new BufferedReader(new FileReader(sourcePath[i]));
            currentLines[i] = readers[i].readLine();
            fileEmpty[i] = (currentLines[i] == null);
        }

        // Merge lines from each file
        boolean allFilesEmpty = false;
        while (!allFilesEmpty) {
            allFilesEmpty = true;
            for (int i = 0; i < sourcePath.length; i++) {
                if (!fileEmpty[i]) {
                    writer.write(currentLines[i]);
                    writer.newLine();
                    currentLines[i] = readers[i].readLine();
                    fileEmpty[i] = (currentLines[i] == null);
                    allFilesEmpty = false;
                }
            }
        }

        // Close readers
        for (BufferedReader reader : readers) {
            reader.close();
        }
    }
}

Esta implementação abre um BufferedReader para cada arquivo de entrada, lê as linhas de cada arquivo e escreve as linhas no arquivo de saída de forma alternada. Se um arquivo não tiver mais linhas, ele é ignorado até que todas as linhas de todos os arquivos tenham sido escritas no arquivo de saída.

✨ Verificar Solução e Praticar

Executar o Processo de Mesclagem de Arquivos

Nesta etapa, você executará o processo de mesclagem de arquivos e verificará a saída.

  1. Abra o arquivo FileMerge.java no diretório /home/labex/project.

  2. Localize a função main e certifique-se de que o array strs contenha os nomes dos arquivos de entrada: "1.txt", "2.txt", e "3.txt".

  3. Execute a classe FileMerge executando o seguinte comando no terminal:

javac FileMerge.java
java FileMerge
  1. Após a execução bem-sucedida do programa, um novo arquivo chamado 0.txt será criado no diretório /home/labex/project. Este arquivo conterá o conteúdo mesclado dos arquivos de entrada.

  2. Abra o arquivo 0.txt e verifique se o conteúdo corresponde à saída esperada:

1
6
7
2
8
3
9
4
5

Parabéns! Você concluiu com sucesso o projeto de mesclagem de arquivos.

✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.