1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.io.filefilter;
19
20 import java.io.File;
21 import java.io.IOException;
22 import java.nio.file.FileVisitResult;
23 import java.nio.file.Files;
24 import java.nio.file.Path;
25 import java.nio.file.attribute.BasicFileAttributes;
26
27 import org.apache.commons.io.file.NoopPathVisitor;
28 import org.apache.commons.io.file.PathUtils;
29 import org.apache.commons.io.file.PathVisitor;
30
31
32
33
34
35
36 public class PathVisitorFileFilter extends AbstractFileFilter {
37
38 private final PathVisitor pathVisitor;
39
40
41
42
43
44
45 public PathVisitorFileFilter(final PathVisitor pathVisitor) {
46 this.pathVisitor = pathVisitor == null ? NoopPathVisitor.INSTANCE : pathVisitor;
47 }
48
49 @Override
50 public boolean accept(final File file) {
51 try {
52 final Path path = file.toPath();
53 return visitFile(path, file.exists() ? PathUtils.readBasicFileAttributes(path) : null) == FileVisitResult.CONTINUE;
54 } catch (final IOException e) {
55 return handle(e) == FileVisitResult.CONTINUE;
56 }
57 }
58
59 @Override
60 public boolean accept(final File dir, final String name) {
61 try {
62 final Path path = dir.toPath().resolve(name);
63 return accept(path, PathUtils.readBasicFileAttributes(path)) == FileVisitResult.CONTINUE;
64 } catch (final IOException e) {
65 return handle(e) == FileVisitResult.CONTINUE;
66 }
67 }
68
69 @Override
70 public FileVisitResult accept(final Path path, final BasicFileAttributes attributes) {
71 return get(() -> Files.isDirectory(path) ? pathVisitor.postVisitDirectory(path, null) : visitFile(path, attributes));
72 }
73
74 @Override
75 public FileVisitResult visitFile(final Path path, final BasicFileAttributes attributes) throws IOException {
76 return pathVisitor.visitFile(path, attributes);
77 }
78
79 }