Este documento apresenta a API Java NIO.2 como uma alternativa melhorada à API java.io para manipulação de arquivos no Java. Apresenta as limitações da API java.io e o design da API NIO.2, incluindo os pacotes principais, a interface Path, a classe Files com métodos estáticos e o WatchService para monitoramento de arquivos. Demonstra várias operações comuns como criação, leitura e escrita de arquivos e diretórios, atributos de arquivo, listagem de diretórios e percorrimento de árvores
5. ● Faltadeinformação sobre o que está acontecendo
● Operações com arquivo nãosãoatômicas
● Semacessoemmassa para atributos dos arquivos
● Difilcudades para escalarlistagem de diretórios
● Faltam operações básicas
● Não é possível copiaratributos de um arquivo
Por que outra API para a
MANIPULAÇÃO de ARQUIVOS?
6. ● Suporte limitado para metadadosdoarquivo
● Suporte limitado para linkssimbólicos
● Não há maneiras de estender a API para implementações
de sistemasdearquivoscustomizados
● Não há suporte para notificações
Por que outra API para a
MANIPULAÇÃO de ARQUIVOS?
7. OdesigndaAPINIO.2
Pacotes
● java.nio.file
● java.nio.file.attribute
● java.nio.file.spi
Path
● Um caminho no sistema de arquivos
Paths
● Fábrica de objetos Path (caminho)
Files
● Classe com métodos estáticos para operações mais comuns
FileSystems
● Fábrica de objetos FileSystem
FileStore
● Encapsula o sistema de armazenamento
8. AinterfacePath
●Representa um caminho absoluto ou relativo
●Iterável sobre elementos de um caminho
●Imutável
●Operações para:
Acesso aos elementos de caminho
Combinar caminhos
Comparar caminhos
17. Outrasoperações
Path path = Paths.get("top", "foo", "bar");
Path normal = path.normalize();
Path abs = path.toAbsolutePath();
Path real = path.toRealPath();
URI uri = path.toUri();
File file = path.toFile();
18. AclasseFiles
● Métodos estáticas para trabalhar com arquivos
● A maioria das operações espera um Path como argumento
● Operações para:
Leitura e Escrita de arquivos
Streams, leitores (readers), escritores (writers)
Links Simbólicos
Trabalhar com diretórios
● Lança exceções significativas em caso de falha
19. Files:Operaçõesbásicas
Path file = Files.createFile(path);
Path dir = Files.createDirectory(pathDir);
Path dir = Files.createDirectories(pathDir);
24. Streams
Path file = ...
InputStream is =
Files.newInputStream(file);
OutputStream os =
Files.newOutputStream(file);
OutputStream osAppend =
Files.newOutputStream(file, CREATE, APPEND);
25. Atributosdearquivo
● Metadados dos arquivos
● Exemplo:
criado, atualizado, data do último acesso
rwxr--r--
● Definido pela plataforma e sistemas de arquivos
26. Atributosdearquivo
BasicFileAttributes
● Suportado por todas as plataformas
● Datas (criação, modificação, último acesso), tipo
arquivo, tamanho, chave do arquivo
DosFileAttributes
● Oculto, arquivo, somente leitura, sistema
PosixFileAttributes
● Dono, grupo, conjunto de permissões
29. ListagemdeDiretório
● Iteração eficiente na listagem de diretórios
● Escalabilidade para grandes diretórios, sistemas de
arquivos remotos, etc.
● Suporta filtros:
Glob
Regex
Filtros personalizados
32. Percorrendoárvoresdediretórios
● Implementa o PadrãoVisitor para percorrer árvores de
diretórios
● Files.walkFileTree (start, fileVisitor)
start: nó incial
fileVisitor: define operaçõe que serão realizadas
● Travessia em profundidade
38. WatchService
PontosaobservarnoMundoReal
● Sub-diretórios não são monitorados
● Alguns editores criam um novo arquivo ao atualizar
Esperamos uma ATUALIZAÇÃO, mas recebemos um
evento EXCLUIR + CRIAR
● Alguns sistemas de arquivos criam inicialmente um
arquivo com zero bytes
Esperamos um evento de CRIAR, mas observamos um
CRIAR + ATUALIZAÇÃO
39. Sistemadearquivospersonalizado
● Permite a criação de sistemas de arquivos personalizados
FileSystemProvider
● Sistema de arquivos em memória
● O Provedor de sistema de arquivo Zip é fornecido como
uma implementação de referência
40. Consideraçõesfinais
● NIO.2 funciona de forma consistente em todas as
plataformas
● Suporta novas operações
● Suporta o acesso em massa para atributos de arquivo
● Exceções melhores
● SPI para a interface de provedores de sistemas de
arquivos personalizados