|
| 1 | +:java-package: src/org/j6toj8/fileio |
| 2 | +:section-java-package: ../../../{java-package} |
| 3 | + |
| 4 | +=== Files com Streams |
| 5 | + |
| 6 | +.Objetivo |
| 7 | +-------------------------------------------------- |
| 8 | +Find a file by using the PathMatcher interface, and use Java SE 8 I/O improvements, including Files.find(), Files.walk(), and lines() methods |
| 9 | +- |
| 10 | +Encontrar um arquivo usando a interface PathMatcher, e usar as melhorias de I/O do Java SE 8, incluindo os métodos Files.find(), Files.walk(), and lines() |
| 11 | +-------------------------------------------------- |
| 12 | + |
| 13 | +Nestão seção serão apresentadas melhorias do Java 8 para encontrar e ler arquivos. São operações que já poderiam ser realizadas com outros métodos antes do Java 8. Porém, com essas melhorias, é possível realizar essas operações utilizando Streams. |
| 14 | + |
| 15 | +. É possível criar um _Stream_ para acessar todos os arquivos, diretórios e subdiretórios de um `Path`. |
| 16 | ++ |
| 17 | +[source,java,indent=0] |
| 18 | +.{java-package}/fileimprovements/Improvements_Walk.java |
| 19 | +---- |
| 20 | +include::{section-java-package}/fileimprovements/Improvements_Walk.java[tag=code] |
| 21 | +---- |
| 22 | ++ |
| 23 | +.Saída no console |
| 24 | +[source,console] |
| 25 | +---- |
| 26 | +Path: /home/rinaldo/arquivos |
| 27 | +
|
| 28 | +Todos os arquivos e diretórios: |
| 29 | +/home/rinaldo/arquivos |
| 30 | +/home/rinaldo/arquivos/arquivo1.txt |
| 31 | +/home/rinaldo/arquivos/arquivo3.txt |
| 32 | +/home/rinaldo/arquivos/subpasta1 |
| 33 | +/home/rinaldo/arquivos/subpasta1/subpasta12 |
| 34 | +/home/rinaldo/arquivos/subpasta1/subpasta12/arquivo122.txt |
| 35 | +/home/rinaldo/arquivos/subpasta1/subpasta12/arquivo121.txt |
| 36 | +/home/rinaldo/arquivos/subpasta1/arquivo11.txt |
| 37 | +/home/rinaldo/arquivos/subpasta1/subpasta11 |
| 38 | +/home/rinaldo/arquivos/subpasta1/arquivo12.txt |
| 39 | +/home/rinaldo/arquivos/subpasta1/arquivo13.txt |
| 40 | +/home/rinaldo/arquivos/arquivo2.txt |
| 41 | +
|
| 42 | +Os primeiro 5 arquivos e diretórios: |
| 43 | +/home/rinaldo/arquivos |
| 44 | +/home/rinaldo/arquivos/arquivo1.txt |
| 45 | +/home/rinaldo/arquivos/arquivo3.txt |
| 46 | +/home/rinaldo/arquivos/subpasta1 |
| 47 | +/home/rinaldo/arquivos/subpasta1/subpasta12 |
| 48 | +---- |
| 49 | ++ |
| 50 | +Perceba que a instância criada é realmente um `Stream<Path>`, de tal forma que é possível realizar as operações disponíveis em qualquer __Stream__, como o método `filter`. |
| 51 | + |
| 52 | +. Existe uma versão do método `walk` para definir opções adicionais e limitar a profundidade do acesso aos subdiretórios. |
| 53 | ++ |
| 54 | +[source,java,indent=0] |
| 55 | +.{java-package}/fileimprovements/Improvements_WalkDepth.java |
| 56 | +---- |
| 57 | +include::{section-java-package}/fileimprovements/Improvements_WalkDepth.java[tag=code] |
| 58 | +---- |
| 59 | ++ |
| 60 | +.Saída no console |
| 61 | +[source,console] |
| 62 | +---- |
| 63 | +Path: /home/rinaldo/arquivos |
| 64 | +
|
| 65 | +Arquivos e Links simbólicos até o segundo nível: |
| 66 | +/home/rinaldo/arquivos |
| 67 | +/home/rinaldo/arquivos/arquivo1.txt |
| 68 | +/home/rinaldo/arquivos/arquivo3.txt |
| 69 | +/home/rinaldo/arquivos/subpasta1 |
| 70 | +/home/rinaldo/arquivos/subpasta1/subpasta12 |
| 71 | +/home/rinaldo/arquivos/subpasta1/arquivo11.txt |
| 72 | +/home/rinaldo/arquivos/subpasta1/subpasta11 |
| 73 | +/home/rinaldo/arquivos/subpasta1/arquivo12.txt |
| 74 | +/home/rinaldo/arquivos/subpasta1/arquivo13.txt |
| 75 | +/home/rinaldo/arquivos/arquivo2.txt |
| 76 | +---- |
| 77 | + |
| 78 | +. É possível pesquisar por um arquivo utilizando o método `find` e filtrar por atributos. |
| 79 | ++ |
| 80 | +[source,java,indent=0] |
| 81 | +.{java-package}/fileimprovements/Improvements_Find.java |
| 82 | +---- |
| 83 | +include::{section-java-package}/fileimprovements/Improvements_Find.java[tag=code] |
| 84 | +---- |
| 85 | ++ |
| 86 | +.Saída no console |
| 87 | +[source,console] |
| 88 | +---- |
| 89 | +Path: /home/rinaldo/arquivos |
| 90 | +
|
| 91 | +Todos os arquivos, ignorando diretórios, até o segundo nível: |
| 92 | +/home/rinaldo/arquivos/arquivo1.txt |
| 93 | +/home/rinaldo/arquivos/arquivo3.txt |
| 94 | +/home/rinaldo/arquivos/subpasta1/arquivo11.txt |
| 95 | +/home/rinaldo/arquivos/subpasta1/arquivo12.txt |
| 96 | +/home/rinaldo/arquivos/subpasta1/arquivo13.txt |
| 97 | +/home/rinaldo/arquivos/arquivo2.txt |
| 98 | +---- |
| 99 | ++ |
| 100 | +Perceba que ao utilizar o `find` a expressão lambda tem acesso ao `Path` e seus atributos, que é uma instância de `BasicFileAttributes`, permitindo uma maior flexibilidade na busca. |
| 101 | + |
| 102 | +. É possível listar o conteúdo de um `Path` utilizando o método `list`. |
| 103 | ++ |
| 104 | +[source,java,indent=0] |
| 105 | +.{java-package}/fileimprovements/Improvements_List.java |
| 106 | +---- |
| 107 | +include::{section-java-package}/fileimprovements/Improvements_List.java[tag=code] |
| 108 | +---- |
| 109 | ++ |
| 110 | +.Saída no console |
| 111 | +[source,console] |
| 112 | +---- |
| 113 | +Path: /home/rinaldo/arquivos |
| 114 | +
|
| 115 | +Listagem do diretório: |
| 116 | +/home/rinaldo/arquivos/arquivo1.txt |
| 117 | +/home/rinaldo/arquivos/arquivo3.txt |
| 118 | +/home/rinaldo/arquivos/subpasta1 |
| 119 | +/home/rinaldo/arquivos/arquivo2.txt |
| 120 | +
|
| 121 | +Listagem do diretório com filtro: |
| 122 | +/home/rinaldo/arquivos/arquivo1.txt |
| 123 | +/home/rinaldo/arquivos/arquivo3.txt |
| 124 | +/home/rinaldo/arquivos/arquivo2.txt |
| 125 | +---- |
| 126 | ++ |
| 127 | +Perceba que o `list` não apresenta elementos dos subdiretórios. |
| 128 | + |
| 129 | +. É possível recuperar todas as linhas de um arquivo como um _Stream_ utilizando o método `lines`. |
| 130 | ++ |
| 131 | +[source,java,indent=0] |
| 132 | +.{java-package}/fileimprovements/Improvements_Lines.java |
| 133 | +---- |
| 134 | +include::{section-java-package}/fileimprovements/Improvements_Lines.java[tag=code] |
| 135 | +---- |
| 136 | ++ |
| 137 | +.Saída no console |
| 138 | +[source,console] |
| 139 | +---- |
| 140 | +Path: /home/rinaldo/arquivos/subpasta1/arquivo11.txt |
| 141 | +
|
| 142 | +Conteúdo do arquivo: |
| 143 | +1 |
| 144 | +2 |
| 145 | +3 |
| 146 | +4 |
| 147 | +5 |
| 148 | +
|
| 149 | +Conteúdo do arquivo: |
| 150 | +3 |
| 151 | +4 |
| 152 | +5 |
| 153 | +---- |
| 154 | + |
| 155 | + |
| 156 | +**** |
| 157 | +
|
| 158 | +* Presenting the New Stream Methods |
| 159 | ++ |
| 160 | +Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 486). Wiley. Edição do Kindle. |
| 161 | +
|
| 162 | +* https://www.baeldung.com/java-list-directory-files[List Files in a Directory in Java.] |
| 163 | +
|
| 164 | +* https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html[Class Files.] Java Plataform SE 7. |
| 165 | +
|
| 166 | +**** |
0 commit comments