Artigo do tipo Tutorial
Recursos especiais neste artigo:
Conteúdo sobre Novidades.
Trabalho com NIO.2: A nova API de I/O do Java 7
A NIO.2 é uma nova API de manipulação de arquivos que surgiu juntamente com o Java 7 por meio da especificação JSR 203. Essa API traz várias melhorias em relação a sua antecessora, fornecendo novos recursos e resolvendo antigos problemas e limitações que existiam na tradicional API de I/O do Java, além de permitir uma codificação mais limpa por meio de seus métodos mais intuitivos. Durante este artigo será apresentado em detalhes as principais funcionalidades advindas com a NIO.2 e como elas podem facilitar a criação de recursos avançados que antes demandavam a manipulação de várias classes.

Em que situação o tema é útil
Manipular arquivos e diretórios é uma tarefa bastante comum no desenvolvimento de sistemas corporativos. Por essa razão esse artigo traz um conteúdo que abrange os principais recursos e melhorias advindos com a API NIO.2 que tem como objetivo tornar mais eficiente a manipulação de arquivos.

Uma das principais dificuldades para quem inicia o aprendizado em Java ou mesmo para desenvolvedores experientes é a necessidade de manipular arquivos e diretórios que se encontram nos diversos tipos de sistemas operacionais utilizados no mercado.

Durante o desenvolvimento de sistemas corporativos, para ambiente web ou mesmo desktop, muitas vezes o desenvolvedor pode se deparar com a necessidade de criar uma classe Java que seja capaz de gerar um arquivo, inserir informações nesse arquivo e depois gravá-lo em um determinado local na estrutura do sistema de arquivos.

Em outra situação bem parecida, um desenvolvedor precisa criar um componente de negócio que seja capaz de ler o conteúdo de um arquivo que foi submetido por uma aplicação web.

Nesse contexto, o componente necessita checar se as informações contidas no arquivo são válidas e se atendem as regras de negócio da aplicação. Após esse procedimento, caso as informações estejam aderentes aos requisitos do sistema, estarão aptas a serem persistidas em um banco de dados, por exemplo.

Como se pode notar, a atividade de manipulação de arquivos pode ser extremamente comum e importante nos mais diversos tipos de sistemas corporativos existentes, entretanto realizar essa tarefa nem sempre foi fácil.

Para conseguir realizar tarefas simples com arquivos através da API de I/O do Java como, por exemplo, mover ou copiar um arquivo de um diretório para outro, ler ou inserir informações em um arquivo, o desenvolvedor precisa trabalhar com várias classes. Isto acontece porque a classe File do pacote java.io possui um número pequeno de recursos para facilitar essa tarefa.

Se analisarmos os métodos presentes na classe File, veremos que a grande maioria deles retorna um valor booleano, ou seja, o desenvolvedor recebe um valor false quando uma operação não é executada com sucesso. Outro problema são as exceções que não ajudam muito a identificar de forma precisa qual foi o problema durante a execução de um método, pois a maioria delas são do tipo IOException.

Além disso, a API de I/O apresenta limitação quanto a fornecer informações sobre os atributos de arquivos como data de criação, última atualização e se o arquivo possui permissão para escrita ou leitura, por exemplo. Há casos também que não é permitido acessar alguns tipos de sistemas de arquivos de plataformas que são suportadas pelo Java.

A fim de amenizar tais limitações, surgiram várias APIs open-source de terceiros para serem utilizadas em conjunto com as classes do pacote java.io, na tentativa de facilitar o trabalho de manipulação de arquivos.

Sabendo dessa necessidade a comunidade Java lançou a especificação JSR 203 – More New I/O APIs for the Java Platform ("NIO.2") ou Mais APIs Novas de Entrada/Saída para a Plataforma Java que é umas das novidades do Java 7 com o objetivo de oferecer novos recursos para a API de I/O.

O nome NIO.2 é devido ao fato de que desde o Java 4 já existe o pacote java.nio.

Essa nova versão da API promete resolver todos os problemas e limitações citados até agora, além de trazer novas funcionalidades, como:

· Acesso assíncrono para sockets e arquivos;

· Melhorias nos sistemas de buffers de I/O;

· Nova API para acesso e manipulação de arquivos e diretórios do File System (Sistemas de arquivos);

· Navegação em árvores de diretórios;

· Manipulação de atributos de arquivos e diretórios;

· Novos recursos para simplificar operações como mover, copiar e apagar arquivos;

· Suporte a links simbólicos;

· Capacidade de lidar com todos os sistemas de arquivo de forma unificada.

Nas próximas seções esses novos recursos serão abordados na prática. Com isso, o leitor poderá utilizar os códigos apresentados como exemplo para fazer seus testes e se aprofundar ainda mais nessa nova API de manipulação de arquivos do Java.

Conhecendo as novas classes e pacotes de NIO.2

Iniciaremos esta seção apresentando os novos pacotes e classes introduzidos no Java 7 para manipular arquivos.

A NIO.2 traz consigo três novos pacotes, são eles:

· java.nio.file: Este é o pacote principal da nova API. É nele que se encontra a maioria das classes para a tarefa de manipulação de arquivos e por isso será um dos pacotes mais utilizados no decorrer do artigo;

· java.nio.file.attribute: disponibiliza classes e interfaces para dar suporte à manipulação dos atributos de arquivos, como por exemplo, data de criação, última modificação, etc.;

· java.nio.file.spi: disponibiliza classes e interfaces que podem ser implementadas para dar suporte unificado a um novo sistema de arquivos.

Há também uma série de novas classes contidas no pacote principal (java.nio.file) da API. Dentre elas podemos destacar as seguintes:

· Files: Dispõe de métodos static que executam operações em arquivos e diretórios de acordo com o sistema de arquivos utilizado;

· FileStore: Representa os recursos de armazenamento de arquivos, como disco rígido, sistema de arquivos, partição, etc.;

· FileSystem: Fornece uma interface para o sistema de arquivos utilizado. Com esta interface é possível criar objetos Path que representam arquivos e diretórios;

· FileSystems: Classe utilizada para obter um sistema de arquivos. Através de seu método estático getDefault() é possível ter acesso ao sistema de arquivos padrão. Além disso, possui métodos capazes de prover acesso a outros sistemas de arquivos além do padrão (default);

· Path: Representa um caminho para um diretório ou arquivo, substituindo a classe File do pacote java.io;

· SimpleFileVisitor<T>: Utilizada para definir um comportamento padrão para o processo de navegação em árvore de diretórios; ...

Quer ler esse conteúdo completo? Tenha acesso completo