scolebourne 2004/10/30 16:12:18
Modified: io/src/test/org/apache/commons/io FilenameUtilsTestCase.java
io/src/java/org/apache/commons/io FilenameUtils.java
Log:
Refactor getXxx methods in FilenameUtils
Revision Changes Path
1.16 +36 -53
jakarta-commons/io/src/test/org/apache/commons/io/FilenameUtilsTestCase.java
Index: FilenameUtilsTestCase.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/io/src/test/org/apache/commons/io/FilenameUtilsTestCase.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- FilenameUtilsTestCase.java 30 Oct 2004 22:43:21 -0000 1.15
+++ FilenameUtilsTestCase.java 30 Oct 2004 23:12:18 -0000 1.16
@@ -75,24 +75,6 @@
FileUtils.deleteDirectory(getTestDirectory());
}
- // removePath
-
- public void testRemovePath() {
- String fileName =
- FilenameUtils.removePath(
- new File(getTestDirectory(), getName()).getAbsolutePath());
- assertEquals(getName(), fileName);
- }
-
- // getPath
-
- public void testGetPath() {
- String fileName =
- FilenameUtils.getPath(
- new File(getTestDirectory(), getName()).getAbsolutePath());
- assertEquals(getTestDirectory().getAbsolutePath(), fileName);
- }
-
// catPath
public void testCatPath() {
@@ -189,40 +171,6 @@
return sb.toString();
}
- public void testGetExtension() {
- String[][] tests = {
- { "filename.ext", "ext" },
- { "README", "" },
- { "domain.dot.com", "com" },
- { "image.jpeg", "jpeg" },
- { "a.b/c", "" },
- { "a.b/c.txt", "txt" },
- { "a/b/c", "" },
- };
- for (int i = 0; i < tests.length; i++) {
- assertEquals(tests[i][1], FilenameUtils.getExtension(tests[i][0]));
- //assertEquals(tests[i][1], FilenameUtils.extension(tests[i][0]));
- }
- }
-
- public void testGetExtensionWithPaths() {
- String[][] testsWithPaths =
- { { "/tmp/foo/filename.ext", "ext" }, {
- "C:\\temp\\foo\\filename.ext", "ext" }, {
- "/tmp/foo.bar/filename.ext", "ext" }, {
- "C:\\temp\\foo.bar\\filename.ext", "ext" }, {
- "/tmp/foo.bar/README", "" }, {
- "C:\\temp\\foo.bar\\README", "" }, {
- "../filename.ext", "ext" }
- };
- for (int i = 0; i < testsWithPaths.length; i++) {
- assertEquals(
- testsWithPaths[i][1],
- FilenameUtils.getExtension(testsWithPaths[i][0]));
- //assertEquals(testsWithPaths[i][1],
FilenameUtils.extension(testsWithPaths[i][0]));
- }
- }
-
public void testRemoveExtension() {
String[][] tests = {
{ "filename.ext", "filename" },
@@ -314,6 +262,41 @@
assertEquals(-1, FilenameUtils.indexOfExtension("a\\b\\c"));
assertEquals(-1, FilenameUtils.indexOfExtension("a/b.notextension/c"));
assertEquals(-1, FilenameUtils.indexOfExtension("a\\b.notextension\\c"));
+ }
+
+ //-----------------------------------------------------------------------
+ public void testGetPath() {
+ assertEquals(null, FilenameUtils.getPath(null));
+ assertEquals("", FilenameUtils.getPath("noseperator.inthispath"));
+ assertEquals("a/b", FilenameUtils.getPath("a/b/c.txt"));
+ assertEquals("a/b", FilenameUtils.getPath("a/b/c"));
+ assertEquals("a/b/c", FilenameUtils.getPath("a/b/c/"));
+ assertEquals("a\\b", FilenameUtils.getPath("a\\b\\c"));
+ }
+
+ public void testRemovePath() {
+ assertEquals(null, FilenameUtils.getName(null));
+ assertEquals("noseperator.inthispath",
FilenameUtils.getName("noseperator.inthispath"));
+ assertEquals("c.txt", FilenameUtils.getName("a/b/c.txt"));
+ assertEquals("c", FilenameUtils.getName("a/b/c"));
+ assertEquals("", FilenameUtils.getName("a/b/c/"));
+ assertEquals("c", FilenameUtils.getName("a\\b\\c"));
+ }
+
+ public void testGetExtension() {
+ assertEquals(null, FilenameUtils.getExtension(null));
+ assertEquals("ext", FilenameUtils.getExtension("file.ext"));
+ assertEquals("", FilenameUtils.getExtension("README"));
+ assertEquals("com", FilenameUtils.getExtension("domain.dot.com"));
+ assertEquals("jpeg", FilenameUtils.getExtension("image.jpeg"));
+ assertEquals("", FilenameUtils.getExtension("a.b/c"));
+ assertEquals("txt", FilenameUtils.getExtension("a.b/c.txt"));
+ assertEquals("", FilenameUtils.getExtension("a/b/c"));
+ assertEquals("", FilenameUtils.getExtension("a.b\\c"));
+ assertEquals("txt", FilenameUtils.getExtension("a.b\\c.txt"));
+ assertEquals("", FilenameUtils.getExtension("a\\b\\c"));
+ assertEquals("", FilenameUtils.getExtension("C:\\temp\\foo.bar\\README"));
+ assertEquals("ext", FilenameUtils.getExtension("../filename.ext"));
}
}
1.22 +91 -126
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.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- FilenameUtils.java 30 Oct 2004 22:43:21 -0000 1.21
+++ FilenameUtils.java 30 Oct 2004 23:12:18 -0000 1.22
@@ -128,121 +128,6 @@
return filename.substring(0, index);
}
- /**
- * Gets the extension of a filename.
- * <p>
- * eg
- * <pre>
- * foo.txt --> "txt"
- * a/b/c.jpg --> "jpg"
- * a/b/c --> ""
- * a.b/c.txt --> "txt"
- * a.b/c --> ""
- * </pre>
- *
- * @param filename the filename to retrieve the extension of.
- * @return the extension of filename or an empty string if none exists.
- */
- public static String getExtension(String filename) {
- String suffix = "";
- String shortFilename = filename;
- String ifilename = internalize(filename);
-
- int lastDirSeparator = ifilename.lastIndexOf(INTERNAL_SEPARATOR_CHAR);
- if (lastDirSeparator > 0) {
- shortFilename = ifilename.substring(lastDirSeparator + 1);
- }
-
- int index = shortFilename.lastIndexOf('.');
-
- if (index > 0 && index < shortFilename.length() - 1) {
- suffix = shortFilename.substring(index + 1);
- }
-
- return suffix;
- }
-
- /**
- * Remove path from filename. Equivalent to the unix command
- * <code>basename</code>.
- * ie.
- * <pre>
- * a/b/c.txt --> c.txt
- * a.txt --> a.txt
- * </pre>
- *
- * @param filepath the filepath
- * @return the filename minus path
- */
- // KILL? Just use StringUtils?
- public static String removePath(String filepath) {
- return removePath(filepath, File.separatorChar);
- }
-
- /**
- * Remove path from filename.
- * ie.
- * <pre>
- * a/b/c.txt --> c.txt
- * a.txt --> a.txt
- * </pre>
- *
- * @param filepath the filepath
- * @param fileSeparatorChar the file separator character to use
- * @return the filename minus path
- */
- // KILL: Why allow the char to be specified?
- public static String removePath( String filepath, char fileSeparatorChar) {
- int index = filepath.lastIndexOf(fileSeparatorChar);
-
- if (-1 == index) {
- return filepath;
- } else {
- return filepath.substring(index + 1);
- }
- }
-
- /**
- * Get path from filename. Roughly equivalent to the unix command
- * <code>dirname</code>.
- * ie.
- * <pre>
- * a/b/c.txt --> a/b
- * a.txt --> ""
- * </pre>
- *
- * @param filepath the filepath
- * @return the filename minus path
- */
- // KILL? Just use StringUtils?
- public static String getPath(String filepath) {
- return getPath(filepath, File.separatorChar);
- }
-
- /**
- * Get path from filename.
- * ie.
- * <pre>
- * a/b/c.txt --> a/b
- * a.txt --> ""
- * </pre>
- *
- * @param filepath the filepath
- * @param fileSeparatorChar the file separator character to use
- * @return the filename minus path
- */
- // KILL: Why allow the char to be specified?
- public static String getPath( String filepath, char fileSeparatorChar) {
- int index = filepath.lastIndexOf(fileSeparatorChar);
- if (-1 == index) {
- return "";
- } else {
- return filepath.substring(0, index);
- }
- }
-
-
-
/**
* Normalize a path.
* Eliminates "/../" and "/./" in a string. Returns <code>null</code> if
@@ -500,16 +385,16 @@
* This method will handle a file in either Unix or Windows format.
* The position of the last forward or backslash is returned.
*
- * @param path the path to find the last path separator in
+ * @param filename the filename to find the last path separator in, null
returns -1
* @return the index of the last separator character, or -1 if there
* is no such character.
*/
- public static int indexOfLastSeparator(String path) {
- if (path == null) {
+ public static int indexOfLastSeparator(String filename) {
+ if (filename == null) {
return -1;
}
- int lastUnixPos = path.lastIndexOf(UNIX_SEPARATOR);
- int lastWindowsPos = path.lastIndexOf(WINDOWS_SEPARATOR);
+ int lastUnixPos = filename.lastIndexOf(UNIX_SEPARATOR);
+ int lastWindowsPos = filename.lastIndexOf(WINDOWS_SEPARATOR);
return Math.max(lastUnixPos, lastWindowsPos);
}
@@ -520,17 +405,97 @@
* To do this it uses [EMAIL PROTECTED] #indexOfLastSeparator(String)} which
will
* handle a file in either Unix or Windows format.
*
- * @param path the path to find the last path separator in
+ * @param filename the filename to find the last path separator in, null
returns -1
* @return the index of the last separator character, or -1 if there
* is no such character.
*/
- public static int indexOfExtension(String path) {
- if (path == null) {
+ public static int indexOfExtension(String filename) {
+ if (filename == null) {
return -1;
}
- int extensionPos = path.lastIndexOf(EXTENSION_SEPARATOR);
- int lastSeparator = indexOfLastSeparator(path);
+ int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR);
+ int lastSeparator = indexOfLastSeparator(filename);
return (lastSeparator > extensionPos ? -1 : extensionPos);
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Gets the path from a full filename.
+ * <p>
+ * This method will handle a file in either Unix or Windows format.
+ * The text before the last forward or backslash is returned.
+ * This method is roughly equivalent to the unix command <code>dirname</code>.
+ * <pre>
+ * a/b/c.txt --> a/b
+ * a.txt --> ""
+ * a/b/c --> a/b
+ * a/b/c/ --> a/b/c
+ * </pre>
+ *
+ * @param filename the filename to query, null returns null
+ * @return the filename minus path
+ */
+ public static String getPath(String filename) {
+ if (filename == null) {
+ return null;
+ }
+ int index = indexOfLastSeparator(filename);
+ if (index == -1) {
+ return "";
+ } else {
+ return filename.substring(0, index);
+ }
+ }
+
+ /**
+ * Gets the name minus the path from a full filename.
+ * <p>
+ * This method will handle a file in either Unix or Windows format.
+ * The text after the last forward or backslash is returned.
+ * This method is roughly equivalent to the unix command <code>basename</code>.
+ * <pre>
+ * a/b/c.txt --> c.txt
+ * a.txt --> a.txt
+ * a/b/c --> c
+ * a/b/c/ --> ""
+ * </pre>
+ *
+ * @param filename the filename to query, null returns null
+ * @return the filename minus path
+ */
+ public static String getName(String filename) {
+ if (filename == null) {
+ return null;
+ }
+ int index = indexOfLastSeparator(filename);
+ return filename.substring(index + 1);
+ }
+
+ /**
+ * Gets the extension of a filename.
+ * <p>
+ * This method returns the textual part of the filename after the last dot.
+ * There must be no directory separator after the dot.
+ * <pre>
+ * foo.txt --> "txt"
+ * a/b/c.jpg --> "jpg"
+ * a/b.txt/c --> ""
+ * a/b/c --> ""
+ * </pre>
+ *
+ * @param filename the filename to retrieve the extension of.
+ * @return the extension of filename or an empty string if none exists.
+ */
+ public static String getExtension(String filename) {
+ if (filename == null) {
+ return null;
+ }
+ int index = indexOfExtension(filename);
+ if (index == -1) {
+ return "";
+ } else {
+ return filename.substring(index + 1);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]