3939import java .util .concurrent .atomic .AtomicLong ;
4040import java .util .function .BiConsumer ;
4141import java .util .function .BiFunction ;
42+ import java .util .function .BiPredicate ;
4243import java .util .function .Consumer ;
4344import java .util .function .Predicate ;
4445import java .util .function .ToIntFunction ;
@@ -1256,12 +1257,6 @@ public <T> T compute(Context context, String key, String path, Class<T> type) {
12561257
12571258 /**
12581259 * Walks the directory passing files and their paths to the listener.
1259- * @param source
1260- * @param target
1261- * @param cleanTarget
1262- * @param cleanPredicate
1263- * @param listener
1264- * @throws IOException
12651260 */
12661261 public static void walk (String path , BiConsumer <File ,String > listener , File ... files ) {
12671262 if (files != null ) {
@@ -1276,6 +1271,21 @@ public static void walk(String path, BiConsumer<File,String> listener, File... f
12761271 }
12771272 }
12781273
1274+ /**
1275+ * Walks the directory passing files and their paths to the visitor.
1276+ * For directories visits children recursively if visitor returns true
1277+ */
1278+ public static void walk (String path , BiPredicate <File ,String > visitor , File ... files ) {
1279+ if (files != null ) {
1280+ for (File file : files ) {
1281+ String filePath = path == null ? file .getName () : path + "/" + file .getName ();
1282+ if (visitor .test (file , filePath ) && file .isDirectory ()) {
1283+ walk (filePath , visitor , file .listFiles ());
1284+ }
1285+ }
1286+ }
1287+ }
1288+
12791289 public static void copy (File source , File target , boolean cleanTarget , BiConsumer <File ,File > listener ) throws IOException {
12801290 if (cleanTarget && target .isDirectory ()) {
12811291 delete (target .listFiles ());
0 commit comments