Operate on file and directory paths by using the Paths class - Operar em arquivos e diretórios usando a classe Paths
As classes Path e Paths são novidades do Java 7.
A classe Path representa um arquivo ou um diretório no sistema de arquivos, e a maioria das suas operações não altera diretamente arquivos ou diretórios.
A classe Paths contém métodos estáticos para a criação de Path.
Para que os exemplos executem independente do sistema, será utilizado o diretório do usuário, que no Java está disponível em uma propriedade da JVM chamada user.home.
-
Existem inúmeras formas de obter uma instância de
Path.src/org/j6toj8/fileio/paths/Paths_Creation.javalink:../../../src/org/j6toj8/fileio/paths/Paths_Creation.java[role=include]
Saída no consoleUser home: /home/rinaldo Path 1: /home/rinaldo Path 2: /home/rinaldo Path 3: /home/rinaldo Path 4: /home/rinaldo/arquivo.txt Path 5: /home/rinaldo/arquivo.txt Path 6: C:/users/rinaldo Path 7: C:/users/rinaldo Path 8: rinaldo Path 9: /home/rinaldo/arquivo.txt Path 10: /home/rinaldo
-
É possível criar uma instância de
Pathapontando para um diretório ou arquivo que não existe.src/org/j6toj8/fileio/paths/Paths_CreationDoesntExists.javalink:../../../src/org/j6toj8/fileio/paths/Paths_CreationDoesntExists.java[role=include]
Saída no consoleUser home: /home/rinaldo Path: /home/rinaldo/arquivoQueNaoExiste.txt
-
É possível converter um
Pathpara umFile.src/org/j6toj8/fileio/paths/Paths_ToFile.javalink:../../../src/org/j6toj8/fileio/paths/Paths_ToFile.java[role=include]
Saída no consoleUser home: /home/rinaldo Path: /home/rinaldo/arquivoQueNaoExiste.txt File: /home/rinaldo/arquivoQueNaoExiste.txt
-
Existem inúmeros método no
Pathpara recuperar informações a seu respeito.src/org/j6toj8/fileio/paths/Paths_Information.javalink:../../../src/org/j6toj8/fileio/paths/Paths_Information.java[role=include]
Saída no consoleUser home: /home/rinaldo Representação em String: /home/rinaldo/arquivos/arquivo.txt Nome do Arquivo: arquivo.txt Diretório Superior: /home/rinaldo/arquivos Diretório Raiz: / É absoluto? true Representação em String: home/rinaldo/arquivos Nome do Arquivo: arquivos Diretório Superior: home/rinaldo Diretório Raiz: null É absoluto? false
-
É possível recuperar os elementos do
Pathindividualmente.src/org/j6toj8/fileio/paths/Paths_Names.javalink:../../../src/org/j6toj8/fileio/paths/Paths_Names.java[role=include]
Saída no consoleUser home: /home/rinaldo home rinaldo arquivos arquivo.txt
-
É possível converter um
Pathrelativo para um absoluto.src/org/j6toj8/fileio/paths/Paths_ToAbsolute.javalink:../../../src/org/j6toj8/fileio/paths/Paths_ToAbsolute.java[role=include]
Saída no consolearquivos É absoluto? false /home/rinaldo/Desenvolvimento/git/java6-to-java8/arquivos É absoluto? true
Neste caso a saída do console vai depende do diretório onde a aplicação está sendo executada.
-
É possível criar Sub-Paths a partir de um
Path.src/org/j6toj8/fileio/paths/Paths_SubPath.javalink:../../../src/org/j6toj8/fileio/paths/Paths_SubPath.java[role=include]
Saída no consoleUser home: /home/rinaldo Path: /home/rinaldo/arquivos/arquivo1.txt home home/rinaldo rinaldo/arquivos arquivos/arquivo1.txt Exception in thread "main" java.lang.IllegalArgumentException at sun.nio.fs.UnixPath.subpath(UnixPath.java:348) at sun.nio.fs.UnixPath.subpath(UnixPath.java:43) at org.j6toj8.fileio.paths.Paths_SubPath.main(Paths_SubPath.java:28)
-
É possível remover redundâncias de um
Pathcom o métodonormalize.src/org/j6toj8/fileio/paths/Paths_Normalize.javalink:../../../src/org/j6toj8/fileio/paths/Paths_Normalize.java[role=include]
Saída no consoleUser home: /home/rinaldo Path: /home/rinaldo/arquivos/./arquivo1.txt Path normalize: /home/rinaldo/arquivos/arquivo1.txt Path: /home/rinaldo/arquivos/../arquivo1.txt Path normalize: /home/rinaldo/arquivo1.txt
-
É possível unir duas instâncias de
Pathcom o métodoresolve.src/org/j6toj8/fileio/paths/Paths_Resolve.javalink:../../../src/org/j6toj8/fileio/paths/Paths_Resolve.java[role=include]
Saída no consoleUser home: /home/rinaldo Absoluto + Relativo: /home/rinaldo/arquivos/arquivo1.txt Relativo + Absoluto: /home/rinaldo/arquivos Absoluto + Absoluto: /home/rinaldo/arquivos Relativo + Relativo: arquivo1.txt/arquivo1.txt
Perceba que sempre que o argumento é um
Pathabsoluto, o resultado final é ele mesmo.Quando o argumento é um
Pathrelativo, ele é acrescentado ao original, seja este absoluto ou relativo. -
É possível derivar um
Pathde outro com o métodorelativize.src/org/j6toj8/fileio/paths/Paths_Relativize.javalink:../../../src/org/j6toj8/fileio/paths/Paths_Relativize.java[role=include]
Saída no consoleUser home: /home/rinaldo Absoluto 1: /home/rinaldo/arquivos Absoluto 2: /home/rinaldo/arquivos/arquivo1.txt Relativo 1: arquivo1.txt Relativo 2: arquivos/arquivo1.txt Absoluto 1 + Absoluto 2: arquivo1.txt Absoluto 2 + Absoluto 1: .. Relativo 1 + Relativo 2: ../arquivos/arquivo1.txt Relativo 2 + Relativo 1: ../../arquivo1.txt java.lang.IllegalArgumentException: 'other' is different type of Path at sun.nio.fs.UnixPath.relativize(UnixPath.java:416) at sun.nio.fs.UnixPath.relativize(UnixPath.java:43) at org.j6toj8.fileio.paths.Paths_Relativize.main(Paths_Relativize.java:33) java.lang.IllegalArgumentException: 'other' is different type of Path at sun.nio.fs.UnixPath.relativize(UnixPath.java:416) at sun.nio.fs.UnixPath.relativize(UnixPath.java:43) at org.j6toj8.fileio.paths.Paths_Relativize.main(Paths_Relativize.java:40)
Todas essas combinações podem aparecer no exame, então entenda bem como cada uma delas se comporta. Lembre-se principalmente de que não é possível derivar um
Pathabsoluto de um relativo, e vice-versa. -
É possível converter um
Pathsintético, que não aponta de fato para um arquivo no sistema de arquivos, em umPathreal, que aponta para um arquivo ou diretório que existe no sistema de arquivos.src/org/j6toj8/fileio/paths/Paths_ToRealPath.javalink:../../../src/org/j6toj8/fileio/paths/Paths_ToRealPath.java[role=include]
Saída no consoleUser home: /home/rinaldo realPath: /home/rinaldo/arquivo1.txt java.nio.file.NoSuchFileException: /home/rinaldo/arquivoQueNaoExiste.txt at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixPath.toRealPath(UnixPath.java:837) at org.j6toj8.fileio.paths.Paths_ToRealPath.main(Paths_ToRealPath.java:25)
Perceba que é lançada exceção caso o arquivo realmente não exista no sistema de arquivos.
-
Introducing NIO.2
Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 454). Wiley. Edição do Kindle.
-
Class Paths. Java Plataform SE 7.
-
Path Operations. The Java™ Tutorials.