terça-feira, 17 de novembro de 2015

Lendo e escrevendo arquivos usando Java 8

Ler arquivo em Java já foi um pouco complicado, pois o desenvolvedor tinha que ter conhecimento da API do Java I/O (InputStream, BufferedReader e por aí vai). Nessa postagem breve vou mostrar algumas formas incrivelmente fáceis de lidar com arquivos no Java 8.


Paths e Files


Essas classes contém métodos estáticos que permitem lidar com arquivos de forma mais fácil.
  • Paths contém só dois métodos que permitem converter uma String (ou uma URI) com o caminho de um arquivo(ou de um diretório) em um objeto do tipo Path, que representa um caminho no sistema operacional. Notem que Files usa o objeto Path em muitos de seus métodos;
  • Files é uma classe cheia de métodos utilitários para trabalharmos com arquivo e com o sistema de arquivos em Java.

Agora vamos  mostrar simples exemplos de como abrir arquivos. Se você usa Java 8, vai ver como está mais do que simples lidar com arquivos.

1) Ler os bytes do arquivo


Ler os bytes de um arquivo é essencial se quisermos trabalhar com imagens e outros tipos de arquivos. Mas também é util se queremos passar o conteúdo de um arquivo texto para uma String. Veja:


byte[] bytesArquivo = Files.readAllBytes(p);
String textoArquivo = new String(bytesArquivo);
System.out.println(textoArquivo);

2) Ler as linhas de um arquivo em uma lista


Caso você queria ter linha a linha de um arquivo sem ter que ler ele inteiro para "picar" em linhas, você pode! Simplesmente use o método Files.getAllLines passando o Path do arquivo e salve o retorno em uma lista(java.util.List):


List<String> linhasArquivo = Files.readAllLines(p);
for (String l : linhasArquivo) {
    System.out.println("Linha: " + l); 
}  
3) Ler as linhas de um arquivo em um Stream

Já falamos aqui das facilidades de um Stream e com uma linha de código a gente pode passar todas as linhas de dentro um arquivo de texto para um java.util.Stream, e nele fazer transformações, filtros, etc. Veja como é fácil:

Files.lines(p).forEach(System.out::println);

O que o método acima faz é pegar linha a linha de um arquivo e chamar o método System.out.println. Note que não preciso chamar o método em sí, mas sim passar a referência.


4) Escrever em um arquivo


Escrever em um arquivo é também assunto de chamar um método só! Chamados o método Files.write e passamos os bytes que queremos escrever:

String linhaNova = "Linha criada em " + new java.util.Date().toString();
Files.write(p, linhaNova.getBytes());

Conclusão

 
Mostramos as facilidades de lidar com arquivo no Java 8. Vejam o código completo baixo. Ele está pronto para ser compilado com javac e executado com java, mas lembre-se de criar um arquivo dados.txt no mesmo diretório onde estará o seu .class


Nenhum comentário:

Postar um comentário