Recursos especiais neste artigo:
Conteúdo sobre Novidades.
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; ...
Black November Desconto exclusivo para as primeiras 200 matrículas! Pagamento anual 12x no cartão De: R$ 69,00 Por: R$ 54,90 Total: R$ 658,80 Garanta o desconto Pagamento recorrente Cobrado mensalmente no cartão De: R$ 79,00 Por: R$ 54,90 /mês Total: R$ 658,80 Garanta o desconto Nossos casos de sucesso Eu sabia pouquíssimas coisas de programação antes de começar a estudar com
vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa
bagagem consegui um estágio logo no início do meu primeiro
período na faculdade. Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo. Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a
pena, pois a plataforma é bem intuitiva e muuuuito
didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito
obrigado! Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento
front-end, tinha coisas que eu ainda não tinha visto. A
didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado,
adorando demais. Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É
um passo a passo incrível. Só não aprende quem não quer.
Foi o melhor investimento da minha vida! Foi um dos melhores investimentos que já fiz na vida e tenho aprendido
bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da
programação, irei assinar meu contrato como programador
graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana,
aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem
como não aprender, estão de parabéns! Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de
seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com
React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo
muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na
área. Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
<Perguntas frequentes>
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!