Skip to content

Commit 301acde

Browse files
author
Stephen Colebourne
committed
Add isExtension methods to test for matching extensions in FilenameUtils
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/io/trunk@140637 13f79535-47bb-0310-9956-ffa450edef68
1 parent 977e83d commit 301acde

2 files changed

Lines changed: 219 additions & 12 deletions

File tree

src/java/org/apache/commons/io/FilenameUtils.java

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.io.File;
1919
import java.io.IOException;
20+
import java.util.Collection;
2021

2122
/**
2223
* Utility class that provides methods to manipulate filenames and filepaths.
@@ -63,7 +64,7 @@
6364
* @author Martin Cooper
6465
* @author <a href="mailto:jeremias@apache.org">Jeremias Maerki</a>
6566
* @author Stephen Colebourne
66-
* @version $Id: FilenameUtils.java,v 1.23 2004/10/30 23:23:54 scolebourne Exp $
67+
* @version $Id: FilenameUtils.java,v 1.24 2004/10/30 23:59:17 scolebourne Exp $
6768
* @since Commons IO 1.1
6869
*/
6970
public class FilenameUtils {
@@ -467,4 +468,88 @@ public static String removeExtension(String filename) {
467468
}
468469
}
469470

471+
//-----------------------------------------------------------------------
472+
/**
473+
* Checks whether the extension of the filename is that specified.
474+
* <p>
475+
* This method obtains the extension as the textual part of the filename
476+
* after the last dot. There must be no directory separator after the dot.
477+
* The extension check is case sensitive on Unix and case insensitive on Windows.
478+
*
479+
* @param filename the filename to query, null returns false
480+
* @param extension the extension to check for, null or empty checks for no extension
481+
* @return true if the filename has the specified extension
482+
*/
483+
public static boolean isExtension(String filename, String extension) {
484+
if (filename == null) {
485+
return false;
486+
}
487+
if (extension == null || extension.length() == 0) {
488+
return (indexOfExtension(filename) == -1);
489+
}
490+
String fileExt = getExtension(filename);
491+
if (SYSTEM_SEPARATOR == WINDOWS_SEPARATOR) {
492+
return fileExt.equalsIgnoreCase(extension);
493+
} else {
494+
return fileExt.equals(extension);
495+
}
496+
}
497+
498+
/**
499+
* Checks whether the extension of the filename is one of those specified.
500+
* <p>
501+
* This method obtains the extension as the textual part of the filename
502+
* after the last dot. There must be no directory separator after the dot.
503+
* The extension check is case sensitive on Unix and case insensitive on Windows.
504+
*
505+
* @param filename the filename to query, null returns false
506+
* @param extensions the extensions to check for, null checks for no extension
507+
* @return true if the filename is one of the extensions
508+
*/
509+
public static boolean isExtension(String filename, String[] extensions) {
510+
if (filename == null) {
511+
return false;
512+
}
513+
if (extensions == null) {
514+
return (indexOfExtension(filename) == -1);
515+
}
516+
String fileExt = getExtension(filename);
517+
if (SYSTEM_SEPARATOR == WINDOWS_SEPARATOR) {
518+
for (int i = 0; i < extensions.length; i++) {
519+
if (fileExt.equalsIgnoreCase(extensions[i])) {
520+
return true;
521+
}
522+
}
523+
} else {
524+
for (int i = 0; i < extensions.length; i++) {
525+
if (fileExt.equals(extensions[i])) {
526+
return true;
527+
}
528+
}
529+
}
530+
return false;
531+
}
532+
533+
/**
534+
* Checks whether the extension of the filename is one of those specified.
535+
* <p>
536+
* This method obtains the extension as the textual part of the filename
537+
* after the last dot. There must be no directory separator after the dot.
538+
* The extension check is case sensitive on Unix and case insensitive on Windows.
539+
*
540+
* @param filename the filename to query, null returns false
541+
* @param extensions the extensions to check for, null checks for no extension
542+
* @return true if the filename is one of the extensions
543+
*/
544+
public static boolean isExtension(String filename, Collection extensions) {
545+
if (filename == null) {
546+
return false;
547+
}
548+
if (extensions == null) {
549+
return (indexOfExtension(filename) == -1);
550+
}
551+
String[] array = (String[]) extensions.toArray(new String[extensions.size()]);
552+
return isExtension(filename, array);
553+
}
554+
470555
}

src/test/org/apache/commons/io/FilenameUtilsTestCase.java

Lines changed: 133 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,28 @@
1717

1818
import java.io.File;
1919
import java.io.IOException;
20-
21-
import org.apache.commons.io.testtools.FileBasedTestCase;
20+
import java.util.ArrayList;
21+
import java.util.Arrays;
22+
import java.util.Collection;
2223

2324
import junit.framework.Test;
2425
import junit.framework.TestSuite;
2526
import junit.textui.TestRunner;
2627

28+
import org.apache.commons.io.testtools.FileBasedTestCase;
29+
2730
/**
2831
* This is used to test FilenameUtils for correctness.
2932
*
3033
* @author Peter Donald
3134
* @author Matthew Hawthorne
3235
* @author Martin Cooper
33-
* @version $Id: FilenameUtilsTestCase.java,v 1.17 2004/10/30 23:23:53 scolebourne Exp $
36+
* @version $Id: FilenameUtilsTestCase.java,v 1.18 2004/10/30 23:59:17 scolebourne Exp $
3437
* @see FilenameUtils
3538
*/
3639
public class FilenameUtilsTestCase extends FileBasedTestCase {
40+
41+
private static final boolean WINDOWS = (File.separatorChar == '\\');
3742

3843
private File testFile1;
3944
private File testFile2;
@@ -191,20 +196,20 @@ public void testSeparatorsToWindows() {
191196
}
192197

193198
public void testSeparatorsToSystem() {
194-
if (File.separatorChar == '/') {
195-
assertEquals(null, FilenameUtils.separatorsToSystem(null));
196-
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("/a/b/c"));
197-
assertEquals("/a/b/c.txt", FilenameUtils.separatorsToSystem("/a/b/c.txt"));
198-
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("/a/b\\c"));
199-
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("\\a\\b\\c"));
200-
assertEquals("D:/a/b/c", FilenameUtils.separatorsToSystem("D:\\a\\b\\c"));
201-
} else {
199+
if (WINDOWS) {
202200
assertEquals(null, FilenameUtils.separatorsToSystem(null));
203201
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToSystem("\\a\\b\\c"));
204202
assertEquals("\\a\\b\\c.txt", FilenameUtils.separatorsToSystem("\\a\\b\\c.txt"));
205203
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToSystem("\\a\\b/c"));
206204
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToSystem("/a/b/c"));
207205
assertEquals("D:\\a\\b\\c", FilenameUtils.separatorsToSystem("D:/a/b/c"));
206+
} else {
207+
assertEquals(null, FilenameUtils.separatorsToSystem(null));
208+
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("/a/b/c"));
209+
assertEquals("/a/b/c.txt", FilenameUtils.separatorsToSystem("/a/b/c.txt"));
210+
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("/a/b\\c"));
211+
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("\\a\\b\\c"));
212+
assertEquals("D:/a/b/c", FilenameUtils.separatorsToSystem("D:\\a\\b\\c"));
208213
}
209214
}
210215

@@ -278,4 +283,121 @@ public void testRemoveExtension() {
278283
assertEquals("../filename", FilenameUtils.removeExtension("../filename.ext"));
279284
}
280285

286+
//-----------------------------------------------------------------------
287+
public void testIsExtension() {
288+
assertEquals(false, FilenameUtils.isExtension(null, (String) null));
289+
assertEquals(false, FilenameUtils.isExtension("file.txt", (String) null));
290+
assertEquals(false, FilenameUtils.isExtension("file.txt", ""));
291+
assertEquals(true, FilenameUtils.isExtension("file.txt", "txt"));
292+
assertEquals(false, FilenameUtils.isExtension("file.txt", "rtf"));
293+
294+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", (String) null));
295+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", ""));
296+
assertEquals(true, FilenameUtils.isExtension("a/b/file.txt", "txt"));
297+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", "rtf"));
298+
299+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", (String) null));
300+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", ""));
301+
assertEquals(true, FilenameUtils.isExtension("a.b/file.txt", "txt"));
302+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", "rtf"));
303+
304+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", (String) null));
305+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", ""));
306+
assertEquals(true, FilenameUtils.isExtension("a\\b\\file.txt", "txt"));
307+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", "rtf"));
308+
309+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", (String) null));
310+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", ""));
311+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", "txt"));
312+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", "rtf"));
313+
314+
if (WINDOWS) {
315+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", "TXT"));
316+
} else {
317+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", "TXT"));
318+
}
319+
}
320+
321+
public void testIsExtensionArray() {
322+
assertEquals(false, FilenameUtils.isExtension(null, (String[]) null));
323+
assertEquals(false, FilenameUtils.isExtension("file.txt", (String[]) null));
324+
assertEquals(false, FilenameUtils.isExtension("file.txt", new String[0]));
325+
assertEquals(true, FilenameUtils.isExtension("file.txt", new String[] {"txt"}));
326+
assertEquals(false, FilenameUtils.isExtension("file.txt", new String[] {"rtf"}));
327+
assertEquals(true, FilenameUtils.isExtension("file.txt", new String[] {"rtf", "txt"}));
328+
329+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", (String[]) null));
330+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", new String[0]));
331+
assertEquals(true, FilenameUtils.isExtension("a/b/file.txt", new String[] {"txt"}));
332+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", new String[] {"rtf"}));
333+
assertEquals(true, FilenameUtils.isExtension("a/b/file.txt", new String[] {"rtf", "txt"}));
334+
335+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", (String[]) null));
336+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", new String[0]));
337+
assertEquals(true, FilenameUtils.isExtension("a.b/file.txt", new String[] {"txt"}));
338+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", new String[] {"rtf"}));
339+
assertEquals(true, FilenameUtils.isExtension("a.b/file.txt", new String[] {"rtf", "txt"}));
340+
341+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", (String[]) null));
342+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", new String[0]));
343+
assertEquals(true, FilenameUtils.isExtension("a\\b\\file.txt", new String[] {"txt"}));
344+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", new String[] {"rtf"}));
345+
assertEquals(true, FilenameUtils.isExtension("a\\b\\file.txt", new String[] {"rtf", "txt"}));
346+
347+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", (String[]) null));
348+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new String[0]));
349+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new String[] {"txt"}));
350+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new String[] {"rtf"}));
351+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new String[] {"rtf", "txt"}));
352+
353+
if (WINDOWS) {
354+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new String[] {"TXT"}));
355+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new String[] {"TXT", "RTF"}));
356+
} else {
357+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new String[] {"TXT"}));
358+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new String[] {"TXT", "RTF"}));
359+
}
360+
}
361+
362+
public void testIsExtensionCollection() {
363+
assertEquals(false, FilenameUtils.isExtension(null, (Collection) null));
364+
assertEquals(false, FilenameUtils.isExtension("file.txt", (Collection) null));
365+
assertEquals(false, FilenameUtils.isExtension("file.txt", new ArrayList()));
366+
assertEquals(true, FilenameUtils.isExtension("file.txt", new ArrayList(Arrays.asList(new String[] {"txt"}))));
367+
assertEquals(false, FilenameUtils.isExtension("file.txt", new ArrayList(Arrays.asList(new String[] {"rtf"}))));
368+
assertEquals(true, FilenameUtils.isExtension("file.txt", new ArrayList(Arrays.asList(new String[] {"rtf", "txt"}))));
369+
370+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", (Collection) null));
371+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", new ArrayList()));
372+
assertEquals(true, FilenameUtils.isExtension("a/b/file.txt", new ArrayList(Arrays.asList(new String[] {"txt"}))));
373+
assertEquals(false, FilenameUtils.isExtension("a/b/file.txt", new ArrayList(Arrays.asList(new String[] {"rtf"}))));
374+
assertEquals(true, FilenameUtils.isExtension("a/b/file.txt", new ArrayList(Arrays.asList(new String[] {"rtf", "txt"}))));
375+
376+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", (Collection) null));
377+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", new ArrayList()));
378+
assertEquals(true, FilenameUtils.isExtension("a.b/file.txt", new ArrayList(Arrays.asList(new String[] {"txt"}))));
379+
assertEquals(false, FilenameUtils.isExtension("a.b/file.txt", new ArrayList(Arrays.asList(new String[] {"rtf"}))));
380+
assertEquals(true, FilenameUtils.isExtension("a.b/file.txt", new ArrayList(Arrays.asList(new String[] {"rtf", "txt"}))));
381+
382+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", (Collection) null));
383+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", new ArrayList()));
384+
assertEquals(true, FilenameUtils.isExtension("a\\b\\file.txt", new ArrayList(Arrays.asList(new String[] {"txt"}))));
385+
assertEquals(false, FilenameUtils.isExtension("a\\b\\file.txt", new ArrayList(Arrays.asList(new String[] {"rtf"}))));
386+
assertEquals(true, FilenameUtils.isExtension("a\\b\\file.txt", new ArrayList(Arrays.asList(new String[] {"rtf", "txt"}))));
387+
388+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", (Collection) null));
389+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList()));
390+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList(Arrays.asList(new String[] {"txt"}))));
391+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList(Arrays.asList(new String[] {"rtf"}))));
392+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList(Arrays.asList(new String[] {"rtf", "txt"}))));
393+
394+
if (WINDOWS) {
395+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList(Arrays.asList(new String[] {"TXT"}))));
396+
assertEquals(true, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList(Arrays.asList(new String[] {"TXT", "RTF"}))));
397+
} else {
398+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList(Arrays.asList(new String[] {"TXT"}))));
399+
assertEquals(false, FilenameUtils.isExtension("a.b\\file.txt", new ArrayList(Arrays.asList(new String[] {"TXT", "RTF"}))));
400+
}
401+
}
402+
281403
}

0 commit comments

Comments
 (0)