11:java-package: src/org/j6toj8/fileio
22:section-java-package: ../../../{java-package}
33
4- === DirectoryStream e FileVisitor
4+ === DirectoryStream and FileVisitor
55
66.Objetivo
77--------------------------------------------------
88Recursively access a directory tree by using the DirectoryStream and FileVisitor interfaces
9- -
10- Acessar recursivamente uma árvore de diretório usando as interfaces DirectoryStream e FileVisitor
119--------------------------------------------------
1210
13- Nestão seção serão apresentadas duas classes para percorrer diretórios : `DirectoryStream` e `FileVisitor`.
11+ In this section we will present two classes for traversing directories : `DirectoryStream` and `FileVisitor`.
1412
15- . É possível checar vários atributos de um `Path` utilizando a classe `Files`.
13+ . You can check various attributes of a `Path` using the `Files` class .
1614+
1715[source,java,indent=0]
1816.{java-package}/recursiveaccess/Recursive_DirectoryStream.java
1917----
2018include::{section-java-package}/recursiveaccess/Recursive_DirectoryStream.java[tag=code]
2119----
2220+
23- .Saída no console
21+ .console output
2422[source,console]
2523----
26- Path: /home/rinaldo/arquivos
27- /home/rinaldo/arquivos/arquivo1 .txt
28- /home/rinaldo/arquivos/arquivo3 .txt
29- /home/rinaldo/arquivos/subpasta1
30- /home/rinaldo/arquivos/arquivo2 .txt
31- /home/rinaldo/arquivos/arquivo1 .txt
32- /home/rinaldo/arquivos/arquivo3 .txt
33- /home/rinaldo/arquivos/subpasta1
34- /home/rinaldo/arquivos/arquivo2 .txt
24+ Path: /home/rinaldo/files
25+ /home/rinaldo/files/file1 .txt
26+ /home/rinaldo/files/file3 .txt
27+ /home/rinaldo/files/subfolder1
28+ /home/rinaldo/files/file2 .txt
29+ /home/rinaldo/files/file1 .txt
30+ /home/rinaldo/files/file3 .txt
31+ /home/rinaldo/files/subfolder1
32+ /home/rinaldo/files/file2 .txt
3533----
3634+
37- Perceba que a instância de `DirectoryStream`:
35+ Note that the instance of `DirectoryStream`:
3836+
39- * Pode ser utilizada com try-with-resources.
40- * Pode ser iterada com a sintaxe de for-each.
41- * Pode ser iterada com o método `forEach` que recebe uma expressão lambda.
42- * Lança exceção caso o arquivo não exista .
43- * Não lista os subdiretórios de forma recursiva, mas sim apenas o primeiro nível .
44- * Não tem relação com a API de _Streams_ do Java 8 .
37+ * Can be used with try-with-resources.
38+ * Can be iterated with for-each syntax .
39+ * Can be iterated with the `forEach` method that receives a lambda expression .
40+ * Throws exception if the file does not exist .
41+ * Do not list subdirectories recursively, but only the first level .
42+ * Not related to the Java 8 _Streams_ API .
4543
46- . É possível acessar toda uma árvore de diretórios utilizando um `FileVisitor`.
44+ . You can access an entire directory tree using a `FileVisitor`.
4745+
4846[source,java,indent=0]
4947.{java-package}/recursiveaccess/Recursive_SimpleFileVisitor.java
5048----
5149include::{section-java-package}/recursiveaccess/Recursive_SimpleFileVisitor.java[tag=code]
5250----
5351+
54- .Saída no console
52+ .console output
5553[source,console]
5654----
57- Path: /home/rinaldo/arquivos
58- Arquivo visitado : /home/rinaldo/arquivos/arquivo1 .txt. Tamanho : 2
59- Arquivo visitado : /home/rinaldo/arquivos/arquivo3 .txt. Tamanho : 10
60- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12/arquivo122 .txt. Tamanho : 10
61- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12/arquivo121 .txt. Tamanho : 10
62- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo11 .txt. Tamanho : 10
63- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo12 .txt. Tamanho : 2
64- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo13 .txt. Tamanho : 2
65- Arquivo visitado : /home/rinaldo/arquivos/arquivo2 .txt. Tamanho : 2
55+ Path: /home/rinaldo/files
56+ Visited file : /home/rinaldo/files/file1 .txt. Size : 2
57+ Visited file : /home/rinaldo/files/file3 .txt. Size : 10
58+ Visited file : /home/rinaldo/files/subfolder1/subfolder12/file122 .txt. Size : 10
59+ Visited file : /home/rinaldo/files/subfolder1/subfolder12/file121 .txt. Size : 10
60+ Visited file : /home/rinaldo/files/subfolder1/file11 .txt. Size : 10
61+ Visited file : /home/rinaldo/files/subfolder1/file12 .txt. Size : 2
62+ Visited file : /home/rinaldo/files/subfolder1/file13 .txt. Size : 2
63+ Visited file : /home/rinaldo/files/file2 .txt. Size : 2
6664----
6765+
68- Perceba que todos os arquivos do diretório e subdiretórios foram visitados e impressos no console ao invocar `Files.walkFileTree`. Para cada arquivo encontrado foi invocado o método `visitFile` da instância de `MeuFileVisitor` .
66+ Note that all files in the directory and subdirectories were visited and printed on the console by invoking `Files.walkFileTree`. For each file found the `visitFile` method of the instance of `MyFileVisitor` was invoked .
6967+
70- Veja que foi retornado `FileVisitResult.CONTINUE` do método `visitFile`. Isso instrui o FileVisitor a continuar visitando a árvore de arquivos. Também é possível retornar `TERMINATE`, `SKIP_SUBTREE` e `SKIP_SIBLINGS`, que serão apresentados a seguir .
68+ Note that `FileVisitResult.CONTINUE` has been returned from the `visitFile` method. This instructs FileVisitor to continue visiting the file tree. You can also return `TERMINATE`, `SKIP_SUBTREE` and `SKIP_SIBLINGS`, which will be shown below .
7169
72- . É possível finalizar a visitação quando for necessário retornando `FileVisitResult.TERMINATE`.
70+ . You can end the visit when needed by returning `FileVisitResult.TERMINATE`.
7371+
7472[source,java,indent=0]
7573.{java-package}/recursiveaccess/Recursive_VisitorTerminate.java
7674----
7775include::{section-java-package}/recursiveaccess/Recursive_VisitorTerminate.java[tag=code]
7876----
7977+
80- .Saída no console
78+ .console output
8179[source,console]
8280----
83- Path: /home/rinaldo/arquivos
84- Arquivo visitado : /home/rinaldo/arquivos/arquivo1 .txt. Tamanho : 2
85- Arquivo visitado : /home/rinaldo/arquivos/arquivo3 .txt. Tamanho : 10
86- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12/arquivo122 .txt. Tamanho : 10
87- Arquivo encontrado. Finalizando .
81+ Path: /home/rinaldo/files
82+ Visited file : /home/rinaldo/files/file1 .txt. Size : 2
83+ Visited file : /home/rinaldo/files/file3 .txt. Size : 10
84+ Visited file : /home/rinaldo/files/subfolder1/subfolder12/file122 .txt. Size : 10
85+ File found. Terminating .
8886----
8987
90- . Também é possível tomar decisões antes e depois de visitar diretórios .
88+ . It is also possible to make decisions before and after visiting directories .
9189+
9290[source,java,indent=0]
9391.{java-package}/recursiveaccess/Recursive_VisitorDirectory.java
9492----
9593include::{section-java-package}/recursiveaccess/Recursive_VisitorDirectory.java[tag=code]
9694----
9795+
98- .Saída no console
96+ .console output
9997[source,console]
10098----
101- Path: /home/rinaldo/arquivos
102- Arquivo visitado : /home/rinaldo/arquivos/arquivo1 .txt. Tamanho : 2
103- Arquivo visitado : /home/rinaldo/arquivos/arquivo3 .txt. Tamanho : 10
104- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo11 .txt. Tamanho : 10
105- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo12 .txt. Tamanho : 2
106- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo13 .txt. Tamanho : 2
107- Arquivo visitado : /home/rinaldo/arquivos/arquivo2 .txt. Tamanho : 2
99+ Path: /home/rinaldo/files
100+ Visited file : /home/rinaldo/files/file1 .txt. Size : 2
101+ Visited file : /home/rinaldo/files/file3 .txt. Size : 10
102+ Visited file : /home/rinaldo/files/subfolder1/file11 .txt. Size : 10
103+ Visited file : /home/rinaldo/files/subfolder1/file12 .txt. Size : 2
104+ Visited file : /home/rinaldo/files/subfolder1/file13 .txt. Size : 2
105+ Visited file : /home/rinaldo/files/file2 .txt. Size : 2
108106----
109107
110- . Também é possível ignorar todos os elementos que estão no mesmo nível de um `Path`.
108+ . You can also ignore all elements that are on the same level as a `Path`.
111109+
112110[source,java,indent=0]
113111.{java-package}/recursiveaccess/Recursive_VisitorIgnoreSiblings.java
114112----
115113include::{section-java-package}/recursiveaccess/Recursive_VisitorIgnoreSiblings.java[tag=code]
116114----
117115+
118- .Saída no console
116+ .console output
119117[source,console]
120118----
121- Path: /home/rinaldo/arquivos
122- Arquivo visitado : /home/rinaldo/arquivos/arquivo1 .txt. Tamanho : 2
123- Arquivo visitado : /home/rinaldo/arquivos/arquivo3 .txt. Tamanho : 10
124- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12/arquivo122 .txt. Tamanho : 10
125- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12/arquivo121 .txt. Tamanho : 10
126- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo11 .txt. Tamanho : 10
127- Arquivo visitado : /home/rinaldo/arquivos/arquivo2 .txt. Tamanho : 2
119+ Path: /home/rinaldo/files
120+ Visited file : /home/rinaldo/files/file1 .txt. Size : 2
121+ Visited file : /home/rinaldo/files/file3 .txt. Size : 10
122+ Visited file : /home/rinaldo/files/subfolder1/subfolder12/file122 .txt. Size : 10
123+ Visited file : /home/rinaldo/files/subfolder1/subfolder12/file121 .txt. Size : 10
124+ Visited file : /home/rinaldo/files/subfolder1/file11 .txt. Size : 10
125+ Visited file : /home/rinaldo/files/file2 .txt. Size : 2
128126----
129127
130- . É possível implementar diretamente a interface `FileVisitor`, ao invés de `SimpleFileVisitor`, e implementar todos os seus métodos .
128+ . You can directly implement the `FileVisitor` interface, instead of `SimpleFileVisitor`, and implement all of its methods .
131129+
132130[source,java,indent=0]
133131.{java-package}/recursiveaccess/Recursive_FileVisitor.java
134132----
135133include::{section-java-package}/recursiveaccess/Recursive_FileVisitor.java[tag=code]
136134----
137135+
138- .Saída no console
136+ .console output
139137[source,console]
140138----
141- Path: /home/rinaldo/arquivos
142- Antes de visitar o diretório : /home/rinaldo/arquivos
143- Arquivo visitado : /home/rinaldo/arquivos/arquivo1 .txt
144- Arquivo visitado : /home/rinaldo/arquivos/arquivo3 .txt
145- Antes de visitar o diretório : /home/rinaldo/arquivos/subpasta1
146- Antes de visitar o diretório : /home/rinaldo/arquivos/subpasta1/subpasta12
147- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12/arquivo122 .txt
148- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12/arquivo121 .txt
149- Após de visitar o diretório : /home/rinaldo/arquivos/subpasta1/subpasta12
150- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo11 .txt
151- Antes de visitar o diretório : /home/rinaldo/arquivos/subpasta1/subpasta11
152- Após de visitar o diretório : /home/rinaldo/arquivos/subpasta1/subpasta11
153- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo12 .txt
154- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo13 .txt
155- Após de visitar o diretório : /home/rinaldo/arquivos/subpasta1
156- Arquivo visitado : /home/rinaldo/arquivos/arquivo2 .txt
157- Após de visitar o diretório : /home/rinaldo/arquivos
158- ----
159-
160- . É possível definir opções adicionais e limitar a profundidade utilizando outra versão do método `walkFileTree`.
139+ Path: /home/rinaldo/files
140+ Before visiting the directory : /home/rinaldo/files
141+ Visited file : /home/rinaldo/files/file1 .txt
142+ Visited file : /home/rinaldo/files/file3 .txt
143+ Before visiting the directory : /home/rinaldo/files/subfolder1
144+ Before visiting the directory : /home/rinaldo/files/subfolder1/subfolder12
145+ Visited file : /home/rinaldo/files/subfolder1/subfolder12/file122 .txt
146+ Visited file : /home/rinaldo/files/subfolder1/subfolder12/file121 .txt
147+ After visiting the directory : /home/rinaldo/files/subfolder1/subfolder12
148+ Visited file : /home/rinaldo/files/subfolder1/file11 .txt
149+ Before visiting the directory : /home/rinaldo/files/subfolder1/subfolder11
150+ After visiting the directory : /home/rinaldo/files/subfolder1/subfolder11
151+ Visited file : /home/rinaldo/files/subfolder1/file12 .txt
152+ Visited file : /home/rinaldo/files/subfolder1/file13 .txt
153+ After visiting the directory : /home/rinaldo/files/subfolder1
154+ Visited file : /home/rinaldo/files/file2 .txt
155+ After visiting the directory : /home/rinaldo/files
156+ ----
157+
158+ . You can set additional options and limit depth using another version of the `walkFileTree` method .
161159+
162160[source,java,indent=0]
163161.{java-package}/recursiveaccess/Recursive_VisitorOptionsAndDepth.java
164162----
165163include::{section-java-package}/recursiveaccess/Recursive_VisitorOptionsAndDepth.java[tag=code]
166164----
167165+
168- .Saída no console
166+ .console output
169167[source,console]
170168----
171- Path: /home/rinaldo/arquivos
172- Arquivo visitado : /home/rinaldo/arquivos/arquivo1 .txt
173- Arquivo visitado : /home/rinaldo/arquivos/arquivo3 .txt
174- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta12
175- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo11 .txt
176- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/subpasta11
177- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo12 .txt
178- Arquivo visitado : /home/rinaldo/arquivos/subpasta1/arquivo13 .txt
179- Arquivo visitado : /home/rinaldo/arquivos/arquivo2 .txt
169+ Path: /home/rinaldo/files
170+ Visited file : /home/rinaldo/files/file1 .txt
171+ Visited file : /home/rinaldo/files/file3 .txt
172+ Visited file : /home/rinaldo/files/subfolder1/subfolder12
173+ Visited file : /home/rinaldo/files/subfolder1/file11 .txt
174+ Visited file : /home/rinaldo/files/subfolder1/subfolder11
175+ Visited file : /home/rinaldo/files/subfolder1/file12 .txt
176+ Visited file : /home/rinaldo/files/subfolder1/file13 .txt
177+ Visited file : /home/rinaldo/files/file2 .txt
180178----
181179
180+ .References
182181****
183182
184183* Working with Directories
185184+
186- Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 617). Wiley. Edição do Kindle.
185+ Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 617). Wiley. Kindle Edition.
187186
188187* https://www.baeldung.com/java-list-directory-files[List Files in a Directory in Java.]
189188
@@ -195,4 +194,4 @@ Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8
195194
196195* https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html[Path Operations.] The Java™ Tutorials.
197196
198- ****
197+ ****
0 commit comments