Manipulação de arquivos não me pareceu ser algo trivial quando se trata de desenvolvimento de softwares, pois com os bancos de dados facilitando armazenamento de dados, seria muito mais trabalhoso lidar com arquivos.
Mas ainda sim, vejo suma importância nesses conceitos, pois há muitos arquivos ainda que precisam de manipulação, além de ser uma ótima maneira de brincar um pouco para treinar conhecimentos.
Hoje vi 3 classes para lidar com arquivos: File, FileReader e BufferedReader. Ambas tem suas peculiaridades e similaridades, irei abordar as que achei mais interessante.
File: É uma representação abstrata de um arquivo ou um diretório. Cada sistema operacional opera de maneira diferente para lidar com seus diretórios e arquivos, por exemplo:
O Linux, para fazer buscas de seus arquivos e pastas usa a barra normal '/': meuDiretorio/meu-arquivo.txt. Já o Windows faz o uso da barra invertida '\' para ter o mesmo resultado: meuDiretorio\meu-arquivo.txt.
O termo usado para essas diferenças é system dependent (dependendo do sistema).
O que a classe file faz é conseguir lidar com essas diferenças independente do sistema (system independent).FileReader: FileReader faz a leitura de uma sequencia de caracteres, lendo apenas 1 caracter por vez. Através do construtor, da mesma maneira como é feito com a classe File, menciona-se o caminho do arquivo que irá fazer a leitura.
BufferedReader: Faz a leitura em blocos de caracteres, suportando uma maior quantidade de caracteres com isso diminuindo o uso de recursos de discos do computador, que consequentemente, melhora o desempenho.
Vendo apenas os exemplos, fiquei confuso de qual a diferença entre eles, vendo que eu consigo fazer a leitura em todos eles, me pareceu redundante haver tantas classes para um mesmo resultado.
Lendo as documentações oficiais da Oracle percebi que há muitas diferenças e irei mencionar as que acredito ter compreendido melhor.
1. Flexibilidade: A classe File é mais flexível, podendo realizar diversas operações, muito além de apenas leituras de texto.
Com o File é possivel criar pastas, criar arquivos, deletar e escrever em arquivos, por exemplo.
Já as classes FileReader e BufferedReader, essas sim, são apenas para a leitura de arquivos de texto e ambos são usados em conjunto, e o motivo para isso é a diferença de número 2.
2. Performance: O FileReader realiza a leitura de uma caracter por vez, prejudicando muito a performance, além de, como já mencionando anteriormente, consumindo muito espaço em disco, por isso ele é usado em conjunto com o BufferedReader. O BufferedReader resolve exatamente esses problemas, lendo uma grande quantidade de sequência de caracteres, dividindo por blocos.
Então para apenas para a leitura de arquivos, não há necessidade de uso da classe File, feriria o princípio de melhorar a performance.
É possivel fazer a leitura de texto usando apenas o FileReader?
Sim, mas leituras de arquivos geralmente vão ter um grande fluxo de caracteres, e o FileReader não performa muito bem fazendo isso de maneira independente, por conta disso, geralmente, vão ser visto exemplos de uso conjunto entre FileReader e BufferedReader.
Fontes:
https://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.lang.String)
https://docs.oracle.com/javase/7/docs/api/java/io/FileReader.html#FileReader(java.lang.String)
https://docs.oracle.com/javase/10/docs/api/java/io/BufferedReader.html
Gostou do texto?
Tem alguma dica, correção ou sugestão?
Por favor, fique a vontade para revisar e pontuar qualquer erro ou confusão que possa ter acontecido, ficarei feliz em corrigir.
Top comments (0)