Desafio técnico de estágio em Java com leitura de CSV
Um walkthrough completo sobre um desafio real de estágio envolvendo leitura e validação de arquivos CSV com Java.
Por que isso é importante
Participar de processos seletivos exige mais do que apenas saber programar. Um bom desafio técnico é a chance de demonstrar organização, domínio da linguagem e capacidade de pensar como desenvolvedor. Este artigo explora um case real para mostrar como você pode se destacar com boas práticas.
Apresentação do Desafio
O desafio proposto consistia em desenvolver um leitor de arquivos CSV em Java para uma vaga de estágio. O programa deveria ler todos os arquivos de um diretório chamado "pendentes", validar conteúdo e estrutura e então movê-los para diretórios "validado" ou "invalidado", com base nos critérios definidos.
Objetivos Técnicos
Os principais objetivos do desafio são avaliar o conhecimento do candidato em:
Leitura e Validação de Arquivos
O projeto propôs que cada CSV contenha as colunas: número da mesa, número do cliente, data da venda, e valor da venda. A validade de cada linha depende da presença correta desses campos.
Execução Procedural Inicial
O autor original implementou todo o processamento dentro do método main, o que tornou o código extenso, repetitivo, e de difícil manutenção. Blocos similares de código apareceram múltiplas vezes desnecessariamente, especialmente na leitura e nas validações.
⚠️Atenção
Escrever todo o código dentro do método main é um dos principais erros de iniciantes na linguagem Java. Modularização é fundamental.
Refatoração em Módulos
Para melhorar a legibilidade e manutenção, o código foi dividido em métodos com responsabilidades claras: um para leitura, outro para validação e outro para movimentação de arquivos. Isso simplifica testes e futuras evoluções no código.
Constantes e Reutilização
Strings como diretórios e delimitadores foram extraídas para constantes. Isso evita repetição e facilita adaptações, por exemplo, suportar diferentes sistemas operacionais ou alterações no formato CSV.
ℹ️Dica
Utilize a biblioteca Paths da API NIO do Java para manipulação de caminhos de forma agnóstica ao sistema operacional.
Tratamento de Exceções
Um dos pontos mais críticos era o uso de blocos try repetidos e o fechamento explícito do BufferedReader, mesmo utilizando try-with-resources que já se encarrega disso automaticamente.
Formatando as Datas
O uso repetitivo do new SimpleDateFormat poderia ser substituído por uma instância única que ficaria em um escopo global. Isso economiza memória e deixa o código mais limpo.
Organização do Projeto
Separar os arquivos em pacotes como entities e application mostra uma preocupação com arquitetura, mesmo em projetos pequenos. Isso permite crescimento da aplicação de forma estruturada.
Abordagem do Code Review
O enfoque do conteúdo foi fazer um code review comentado, algo raramente explorado com profundidade. Avaliar um projeto pronto pode ensinar tanto quanto desenvolver do zero.
Principais Melhorias Sugeridas
Bibliotecas e Ferramentas Utilizadas
Java JDK 8+
Ambiente de execução e compilação
IntelliJ IDEA
IDE utilizada para estruturação e testes
java.nio.file
API moderna para manipulação de arquivos e diretórios
Onde Estudar Mais
A plataforma Rocketseat oferece uma série de cursos voltados a desenvolvimento backend e aplicações modernas em Java com Spring Boot.
Conteúdos Adicionais da Plataforma
Na formação Java da Rocketseat, você terá acesso a 220 aulas, 9 quizzes e 3 projetos práticos, que abordam desde fundamentos até padrões de projeto e integrações com front-end.
Certificação e Projetos Práticos
Ao final da formação, o aluno recebe certificado, participa de desafios NLW e conta com uma comunidade ativa no Discord, inclusive sobre desafios como esse.
Conclusão
Desafios técnicos são mais do que entregar código funcional: são oportunidades reais de mostrar qualidade técnica, profissionalismo e organização. A forma como você entrega diz muito sobre quem você é como desenvolvedor.