Skip to content

Commit b9872e6

Browse files
author
Stephen Colebourne
committed
FileFilterUtils.makeDirectoryOnly/makeFileOnly
- two new methods that decorate a file filter to make it apply to directories only or files only git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/io/trunk@463940 13f79535-47bb-0310-9956-ffa450edef68
1 parent 207ff33 commit b9872e6

3 files changed

Lines changed: 92 additions & 3 deletions

File tree

RELEASE-NOTES.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,14 @@ Enhancements from 1.2
139139
(whereas if everything uses INSTANCE, then they just clash)
140140
- The old INSTANCE constants are still present and have not been deprecated
141141

142-
- FileFilterUtils
142+
- FileFilterUtils.sizeRangeFileFilter
143143
- new sizeRangeFileFilter(long minimumSize, long maximumSize) method which
144144
creates a filter that accepts files within the specified size range.
145145

146+
- FileFilterUtils.makeDirectoryOnly/makeFileOnly
147+
- two new methods that decorate a file filter to make it apply to
148+
directories only or files only
149+
146150
- NullWriter
147151
- New writer that acts as a sink for all data, as per /dev/null
148152

src/java/org/apache/commons/io/filefilter/FileFilterUtils.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ public static IOFileFilter makeSVNAware(IOFileFilter filter) {
218218
}
219219

220220
//-----------------------------------------------------------------------
221-
222221
/**
223222
* Returns a filter that returns true if the file was last modified after
224223
* the specified cutoff time.
@@ -332,4 +331,33 @@ public static IOFileFilter sizeRangeFileFilter(long minSizeInclusive, long maxSi
332331
return new AndFileFilter(minimumFilter, maximumFilter);
333332
}
334333

334+
//-----------------------------------------------------------------------
335+
/**
336+
* Decorates a filter so that it only applies to directories and not to files.
337+
*
338+
* @param filter the filter to decorate, null means an unrestricted filter
339+
* @return the decorated filter, never null
340+
* @since 1.3
341+
*/
342+
public static IOFileFilter makeDirectoryOnly(IOFileFilter filter) {
343+
if (filter == null) {
344+
return DirectoryFileFilter.DIRECTORY;
345+
}
346+
return new AndFileFilter(DirectoryFileFilter.DIRECTORY, filter);
347+
}
348+
349+
/**
350+
* Decorates a filter so that it only applies to files and not to directories.
351+
*
352+
* @param filter the filter to decorate, null means an unrestricted filter
353+
* @return the decorated filter, never null
354+
* @since 1.3
355+
*/
356+
public static IOFileFilter makeFileOnly(IOFileFilter filter) {
357+
if (filter == null) {
358+
return FileFileFilter.FILE;
359+
}
360+
return new AndFileFilter(FileFileFilter.FILE, filter);
361+
}
362+
335363
}

src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -736,5 +736,62 @@ public void testEmpty() throws Exception {
736736
FileUtils.forceDelete(emptyDir);
737737
}
738738

739+
//-----------------------------------------------------------------------
740+
public void testMakeDirectoryOnly() throws Exception {
741+
assertSame(DirectoryFileFilter.DIRECTORY, FileFilterUtils.makeDirectoryOnly(null));
742+
743+
IOFileFilter filter = FileFilterUtils.makeDirectoryOnly(
744+
FileFilterUtils.nameFileFilter("B"));
745+
746+
File fileA = new File(getTestDirectory(), "A");
747+
File fileB = new File(getTestDirectory(), "B");
748+
749+
fileA.mkdirs();
750+
fileB.mkdirs();
751+
752+
assertFiltering(filter, fileA, false);
753+
assertFiltering(filter, fileB, true);
754+
755+
FileUtils.deleteDirectory(fileA);
756+
FileUtils.deleteDirectory(fileB);
757+
758+
createFile(fileA, 32);
759+
createFile(fileB, 32);
760+
761+
assertFiltering(filter, fileA, false);
762+
assertFiltering(filter, fileB, false);
763+
764+
fileA.delete();
765+
fileB.delete();
766+
}
767+
768+
//-----------------------------------------------------------------------
769+
public void testMakeFileOnly() throws Exception {
770+
assertSame(FileFileFilter.FILE, FileFilterUtils.makeFileOnly(null));
771+
772+
IOFileFilter filter = FileFilterUtils.makeFileOnly(
773+
FileFilterUtils.nameFileFilter("B"));
774+
775+
File fileA = new File(getTestDirectory(), "A");
776+
File fileB = new File(getTestDirectory(), "B");
777+
778+
fileA.mkdirs();
779+
fileB.mkdirs();
780+
781+
assertFiltering(filter, fileA, false);
782+
assertFiltering(filter, fileB, false);
783+
784+
FileUtils.deleteDirectory(fileA);
785+
FileUtils.deleteDirectory(fileB);
786+
787+
createFile(fileA, 32);
788+
createFile(fileB, 32);
789+
790+
assertFiltering(filter, fileA, false);
791+
assertFiltering(filter, fileB, true);
792+
793+
fileA.delete();
794+
fileB.delete();
795+
}
796+
739797
}
740-

0 commit comments

Comments
 (0)