SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
JavaNIO.2:MaisumaAPIparaI/O?
UMARÁPIDAINTRODUÇÃO
FranciscoOliveira
OzJUG-2016
WhoamI?
AnalistadeSistemas
● Iron Mountain do Brasil
TecnólogoemAnáliseeDesenvolvimentodeSistemas
● Fatec Ipiranga
Social
● delley.fx@gmail.com
● @delley_fx
● facebook.com/delley.fx
● github.com/delley
O que há de errado com
java.io.File?
● 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?
● 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?
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
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
Criandoumcaminho
Path path =
FileSystems.getDefault().getPath("/foo");
Criandoumcaminho
Path path = Paths.get("/foo");
Criandoumcaminho
URI uri = URI.create("file:///foo");
Path path = Paths.get(uri);
Criandoumcaminho
File file = new File("/foo");
Path path = file.getPath();
Acessandoelementosdeumcaminho
Path path = Paths.get("/","foo","bar","x");
Path file = path.getFileName();
Path parent = path.getParent();
Path root = path.getRoot();
Path subpath = path.subpath(1,3);
Acessandoelementosdeumcaminho
Path path = Paths.get("/","foo","bar","x");
for (Path element : path ) {
System.out.format("%s%n", element);
}
Combinandocaminhos
Path foo = Paths.get("/", "foo");
Path bar = foo.resolve("bar");
Path baz = foo.resolveSibling("baz");
Path qux = Paths.get("/", "baz", "qux");
Path relative = foo.relativize(qux);
Testandocaminhos
Path path = Paths.get("top", "foo", "bar");
boolean isStart = path.startsWith("to");
boolean isEnd = path.endsWith("pot");
boolean isAbs = path.isAbsolute();
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();
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
Files:Operaçõesbásicas
Path file = Files.createFile(path);
Path dir = Files.createDirectory(pathDir);
Path dir = Files.createDirectories(pathDir);
Files:Operaçõesbásicas
import static
java.nio.charset.StandardCharsets.*;
List<String> lines = Files.readAllLines(file,
UTF_8);
byte[] bytes = Files.readAllBytes(file);
Files.delete(path);
Files.deleteIfExists(path);
Files.copy(source, target);
Files.copy(source, target, ATOMIC_MOVE,
REPLACE_EXISTING, COPY_ATTRIBUTES);
Files.move(source, target);
Files:Operaçõesbásicas
Files:Linkssimbólicos
Path link = Paths.get("top", "link");
Path target = Paths.get("top", "foo", "tar");
Files.createSymbolicLink(link, target);
boolean isSymLink = Files.isSymbolicLink(link);
boolean isSame = Files.isSameFile(link, target);
Path tar = Files.readSymbolicLink(link);
Leitura(reader)eescrita(Writer)
import static
java.nio.charset.StandardCharsets.*;
import java.nio.file.StandardOpenOption;
Path file = ...
BufferedReader reader =
Files.newBufferedReader(file, UTF_8);
BufferedWriter writer =
Files.newBufferedWriter(file, UTF_8,
StandardOpenOption.CREATE_NEW);
Streams
Path file = ...
InputStream is =
Files.newInputStream(file);
OutputStream os =
Files.newOutputStream(file);
OutputStream osAppend =
Files.newOutputStream(file, CREATE, APPEND);
Atributosdearquivo
● Metadados dos arquivos
● Exemplo:
 criado, atualizado, data do último acesso
 rwxr--r--
● Definido pela plataforma e sistemas de arquivos
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
Atributosdearquivo
BasicFileAttributes basicAttr =
Files.readAttributes(path,
BasicFileAttributes.class);
String key = basicAttr.fileKey();
long size = basicAttr.size();
boolean isDirectory = basicAttr.isDirectory();
FileTime lastModified =
basicAttr.lastModifiedTime();
Atributosdearquivo
PosixFileAttributes posixAttr =
Files.readAttributes(path,
PosixFileAttributes.class);
UserPrincipal owner = posixAttr.owner();
GroupPrincipal group = posixAttr.group();
String perms =
PosixFilePermissions.toString(
posixAttr.permissions()));
Files.setPosixFilePermissions(path,
PosixFilePermissions.fromString("rwxrwxrwx"));
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
ListagemdeDiretórios
try (DirectoryStream<Path> dirStream =
Files.newDirectoryStream(dir,"*.java")) {
for (Path path : dirStream) {
format("%s%n", path.toAbsolutePath());
}
}
ListagemdeDiretório
DirectoryStream.Filter<Path> filter =
new DirectoryStream.Filter<Path>() {
public boolean accept(Path entry)
throws IOException {
return Files.size(entry) > 1024;
}
};
try (DirectoryStream<Path> dirStream =
Files.newDirectoryStream(dir,filter)) {
...
}
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
Percorrendoárvoresdediretórios
● Métodos callbacks de FileVisitor:
 preVisitDirectory
 visitFile
 postVisitDirectory
 visitFileFailed
● Enum FileVisitResult
 CONTINUE
 TERMINATE
 SKIP_SUBTREE
 SKIP_SIBLINGS
Percorrendoárvoresdediretórios
Path start = Paths.get("/foo/bar");
Files.walkFileTree(start, new SimpleFileVisitor<Path>(){
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) throws IOException {
format("preVisitDirectory: %s%n", dir);
return FileVisitResult.CONTINUE;
}
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
format("visitFile: %s%n", file);
return FileVisitResult.CONTINUE;
}
});
WatchService
● Monitora mudanças
 Criar, atualizar, excluir
● Usa notificações nativas
WatchService
WatchService watcher =
FileSystems.getDefault().newWatchService();
Path dir = …
WatchKey watchKey = dir.register(watcher,
ENTRY_MODIFY);
WatchService
boolean keepWatching = true;
while(keepWatching){
WatchKey key = watcher.poll(10,
TimeUnit.SECONDS);
for (WatchEvent<?> event: key.pollEvents()) {
if (event.kind() == ENTRY_MODIFY) {
Path name = (Path) event.context();
...
}
}
key.reset();
}
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
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
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
OBRIGADO!!!

Mais conteúdo relacionado

Mais procurados

Mais procurados (10)

Java 05
Java 05Java 05
Java 05
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Shell Script - Controle de fluxo
Shell Script - Controle de fluxoShell Script - Controle de fluxo
Shell Script - Controle de fluxo
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
 
HTML - HyperText Markup Language - Introdução
HTML - HyperText Markup Language - IntroduçãoHTML - HyperText Markup Language - Introdução
HTML - HyperText Markup Language - Introdução
 
Presentation
PresentationPresentation
Presentation
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 

Destaque

Trekking fenogliano
Trekking fenoglianoTrekking fenogliano
Trekking fenoglianoafanzini
 
Aws serverless multi-tier_architectures
Aws serverless multi-tier_architecturesAws serverless multi-tier_architectures
Aws serverless multi-tier_architecturesDevthilina Abayaratne
 
Viaggio nella poesia di Giorgio Caproni
Viaggio nella poesia di Giorgio CaproniViaggio nella poesia di Giorgio Caproni
Viaggio nella poesia di Giorgio Caproniafanzini
 
AWS SysOps Administrator Associate Certificate
AWS SysOps Administrator Associate CertificateAWS SysOps Administrator Associate Certificate
AWS SysOps Administrator Associate CertificateBrad Campbell
 
Actividad intermedia fase 2
Actividad intermedia   fase 2Actividad intermedia   fase 2
Actividad intermedia fase 2Stephany Cabezas
 
The Forrester Wave Q2 2015
The Forrester Wave Q2 2015The Forrester Wave Q2 2015
The Forrester Wave Q2 2015Empire Selling
 
AWS Certified Developer Associate Certification
AWS Certified Developer Associate CertificationAWS Certified Developer Associate Certification
AWS Certified Developer Associate CertificationBrad Campbell
 
φύλλο εργασίας στη σικελική εκστρατεία
φύλλο εργασίας στη σικελική εκστρατείαφύλλο εργασίας στη σικελική εκστρατεία
φύλλο εργασίας στη σικελική εκστρατείαJoanna-Dina
 
ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ
ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ
ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑharitinitrigazi1
 
Penilaian aset-tetap-dalam-perspektif-sap-141111
Penilaian aset-tetap-dalam-perspektif-sap-141111Penilaian aset-tetap-dalam-perspektif-sap-141111
Penilaian aset-tetap-dalam-perspektif-sap-141111anhynurhayani77
 
Introduccion al Comercio Electrónico
Introduccion al Comercio ElectrónicoIntroduccion al Comercio Electrónico
Introduccion al Comercio Electrónicochita21
 
The 2014 AWS Enterprise Summit - TCO and Cost Optimization
The 2014 AWS Enterprise Summit - TCO and Cost Optimization The 2014 AWS Enterprise Summit - TCO and Cost Optimization
The 2014 AWS Enterprise Summit - TCO and Cost Optimization Amazon Web Services
 
Total Cost of Ownership, what is it ? and why do we need to know more about it.
Total Cost of Ownership, what is it ? and why do we need to know more about it.Total Cost of Ownership, what is it ? and why do we need to know more about it.
Total Cost of Ownership, what is it ? and why do we need to know more about it.Ashraf Osman
 
Evaluación del modulo 1
Evaluación del modulo 1Evaluación del modulo 1
Evaluación del modulo 1M. Ugas
 
Herramientas 2.0 para el Docente
Herramientas 2.0 para el DocenteHerramientas 2.0 para el Docente
Herramientas 2.0 para el DocenteM. Ugas
 
Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7
Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7
Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7chavalesnick
 

Destaque (20)

Used to
Used toUsed to
Used to
 
Trekking fenogliano
Trekking fenoglianoTrekking fenogliano
Trekking fenogliano
 
Moodle
MoodleMoodle
Moodle
 
Global financial markets and institutions
 Global financial markets and institutions Global financial markets and institutions
Global financial markets and institutions
 
Aws serverless multi-tier_architectures
Aws serverless multi-tier_architecturesAws serverless multi-tier_architectures
Aws serverless multi-tier_architectures
 
Viaggio nella poesia di Giorgio Caproni
Viaggio nella poesia di Giorgio CaproniViaggio nella poesia di Giorgio Caproni
Viaggio nella poesia di Giorgio Caproni
 
AWS SysOps Administrator Associate Certificate
AWS SysOps Administrator Associate CertificateAWS SysOps Administrator Associate Certificate
AWS SysOps Administrator Associate Certificate
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Actividad intermedia fase 2
Actividad intermedia   fase 2Actividad intermedia   fase 2
Actividad intermedia fase 2
 
The Forrester Wave Q2 2015
The Forrester Wave Q2 2015The Forrester Wave Q2 2015
The Forrester Wave Q2 2015
 
AWS Certified Developer Associate Certification
AWS Certified Developer Associate CertificationAWS Certified Developer Associate Certification
AWS Certified Developer Associate Certification
 
φύλλο εργασίας στη σικελική εκστρατεία
φύλλο εργασίας στη σικελική εκστρατείαφύλλο εργασίας στη σικελική εκστρατεία
φύλλο εργασίας στη σικελική εκστρατεία
 
ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ
ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ
ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ
 
Penilaian aset-tetap-dalam-perspektif-sap-141111
Penilaian aset-tetap-dalam-perspektif-sap-141111Penilaian aset-tetap-dalam-perspektif-sap-141111
Penilaian aset-tetap-dalam-perspektif-sap-141111
 
Introduccion al Comercio Electrónico
Introduccion al Comercio ElectrónicoIntroduccion al Comercio Electrónico
Introduccion al Comercio Electrónico
 
The 2014 AWS Enterprise Summit - TCO and Cost Optimization
The 2014 AWS Enterprise Summit - TCO and Cost Optimization The 2014 AWS Enterprise Summit - TCO and Cost Optimization
The 2014 AWS Enterprise Summit - TCO and Cost Optimization
 
Total Cost of Ownership, what is it ? and why do we need to know more about it.
Total Cost of Ownership, what is it ? and why do we need to know more about it.Total Cost of Ownership, what is it ? and why do we need to know more about it.
Total Cost of Ownership, what is it ? and why do we need to know more about it.
 
Evaluación del modulo 1
Evaluación del modulo 1Evaluación del modulo 1
Evaluación del modulo 1
 
Herramientas 2.0 para el Docente
Herramientas 2.0 para el DocenteHerramientas 2.0 para el Docente
Herramientas 2.0 para el Docente
 
Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7
Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7
Επαναληπικό φύλλο εργασίας α΄ γυμν αρχαία, ενότητες 1- 7
 

Semelhante a JavaNIO.2:UmaAPIparaE/S

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Maurício Linhares
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistenciaRoberson Alves
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...Julio Oliveira
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redisAllisson Azevedo
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeGabriel Machado
 
java.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosjava.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosMarcello Thiry
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
eduAula08 phonegap arquivos
eduAula08 phonegap arquivoseduAula08 phonegap arquivos
eduAula08 phonegap arquivosRoberson Alves
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 

Semelhante a JavaNIO.2:UmaAPIparaE/S (20)

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistencia
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
Material sobre sistemas de arquivos do Windows,como é a organização e o supor...
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redis
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP Vale
 
java.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosjava.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivos
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
eduAula08 phonegap arquivos
eduAula08 phonegap arquivoseduAula08 phonegap arquivos
eduAula08 phonegap arquivos
 
django.pptx
django.pptxdjango.pptx
django.pptx
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
Java9
Java9Java9
Java9
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
 

JavaNIO.2:UmaAPIparaE/S