You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2004/12/10 23:36:57 UTC
cvs commit: jakarta-commons/io/src/test/org/apache/commons/io FilenameUtilsWildcardTestCase.java
scolebourne 2004/12/10 14:36:57
Modified: io/src/java/org/apache/commons/io FilenameUtils.java
io/src/test/org/apache/commons/io
FilenameUtilsWildcardTestCase.java
Log:
Convert wildcard method to match based on OS case sensitivity
Revision Changes Path
1.32 +33 -20 jakarta-commons/io/src/java/org/apache/commons/io/FilenameUtils.java
Index: FilenameUtils.java
===================================================================
RCS file: /home/cvs/jakarta-commons/io/src/java/org/apache/commons/io/FilenameUtils.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- FilenameUtils.java 4 Dec 2004 19:28:40 -0000 1.31
+++ FilenameUtils.java 10 Dec 2004 22:36:56 -0000 1.32
@@ -824,6 +824,7 @@
* The wildcard matcher uses the characters '?' and '*' to represent a
* single or multiple wildcard characters.
* This is the same as often found on Dos/Unix command lines.
+ * The extension check is case sensitive on Unix and case insensitive on Windows.
* <pre>
* wildcardMatch("c.txt", "*.txt") --> true
* wildcardMatch("c.txt", "*.jpg") --> false
@@ -837,24 +838,38 @@
* @return true if the filename matches the wilcard string
*/
public static boolean wildcardMatch(String filename, String wildcardMatcher) {
+ if (filename == null && wildcardMatcher == null) {
+ return true;
+ }
+ if (filename == null || wildcardMatcher == null) {
+ return false;
+ }
+ if (SYSTEM_SEPARATOR == WINDOWS_SEPARATOR) {
+ filename = filename.toLowerCase();
+ wildcardMatcher = wildcardMatcher.toLowerCase();
+ }
String[] wcs = splitOnTokens(wildcardMatcher);
-
+ boolean anyChars = false;
int textIdx = 0;
int wcsIdx = 0;
- boolean anyChars = false;
// loop whilst tokens and text left to process
while (wcsIdx < wcs.length && textIdx < filename.length()) {
- // ? so move to next text char
if (wcs[wcsIdx].equals("?")) {
+ // ? so move to next text char
textIdx++;
- } else if (!wcs[wcsIdx].equals("*")) {
+ anyChars = false;
+
+ } else if (wcs[wcsIdx].equals("*")) {
+ // set any chars status
+ anyChars = true;
+
+ } else {
// matching text token
if (anyChars) {
// any chars then try to locate text token
textIdx = filename.indexOf(wcs[wcsIdx], textIdx);
-
if (textIdx == -1) {
// token not found
return false;
@@ -869,11 +884,9 @@
// matched text token, move text index to end of matched token
textIdx += wcs[wcsIdx].length();
+ anyChars = false;
}
- // set any chars status
- anyChars = wcs[wcsIdx].equals("*");
-
wcsIdx++;
}
@@ -901,24 +914,24 @@
// used by wildcardMatch
// package level so a unit test may run on this
static String[] splitOnTokens(String text) {
- char[] array = text.toCharArray();
if (text.indexOf("?") == -1 && text.indexOf("*") == -1) {
return new String[] { text };
}
+ char[] array = text.toCharArray();
ArrayList list = new ArrayList();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < array.length; i++) {
- if(array[i] == '?' || array[i] == '*') {
- if(buffer.length() != 0) {
- list.add(buffer.toString());
- buffer.setLength(0);
- }
- list.add(new String( new char[] { array[i] } ));
- } else {
- buffer.append(array[i]);
- }
- }
+ if (array[i] == '?' || array[i] == '*') {
+ if (buffer.length() != 0) {
+ list.add(buffer.toString());
+ buffer.setLength(0);
+ }
+ list.add(new String(new char[] { array[i] }));
+ } else {
+ buffer.append(array[i]);
+ }
+ }
if (buffer.length() != 0) {
list.add(buffer.toString());
}
1.2 +8 -0 jakarta-commons/io/src/test/org/apache/commons/io/FilenameUtilsWildcardTestCase.java
Index: FilenameUtilsWildcardTestCase.java
===================================================================
RCS file: /home/cvs/jakarta-commons/io/src/test/org/apache/commons/io/FilenameUtilsWildcardTestCase.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FilenameUtilsWildcardTestCase.java 31 Oct 2004 04:17:34 -0000 1.1
+++ FilenameUtilsWildcardTestCase.java 10 Dec 2004 22:36:57 -0000 1.2
@@ -15,10 +15,14 @@
*/
package org.apache.commons.io;
+import java.io.File;
+
import junit.framework.TestCase;
public class FilenameUtilsWildcardTestCase extends TestCase {
+ private static final boolean WINDOWS = (File.separatorChar == '\\');
+
public FilenameUtilsWildcardTestCase(String name) {
super(name);
}
@@ -28,6 +32,9 @@
// FilenameUtils.wildcardMatch(String,String)
public void testMatch() {
+ assertEquals(false, FilenameUtils.wildcardMatch(null, "Foo") );
+ assertEquals(false, FilenameUtils.wildcardMatch("Foo", null) );
+ assertEquals(true, FilenameUtils.wildcardMatch(null, null) );
assertTrue( FilenameUtils.wildcardMatch("Foo", "Foo") );
assertTrue( FilenameUtils.wildcardMatch("", "") );
assertTrue( FilenameUtils.wildcardMatch("Foo", "Fo*") );
@@ -39,6 +46,7 @@
assertTrue( FilenameUtils.wildcardMatch("Adobe Acrobat Installer", "Ad*er") );
assertTrue( FilenameUtils.wildcardMatch("Foo", "*Foo") );
assertTrue( FilenameUtils.wildcardMatch("Foo", "Foo*") );
+ assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOO", "Foo*") );
}
public void testSplitOnTokens() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org