martinc 2004/10/24 11:34:23
Modified: io/src/java/org/apache/commons/io FilenameUtils.java
io/src/test/org/apache/commons/io FilenameUtilsTestCase.java
Log:
Make getExtension() and hence removeExtension() work for both Windows and
*nix paths. Enable (and fix) tests for both.
Revision Changes Path
1.13 +37 -3
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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- FilenameUtils.java 24 Oct 2004 04:20:07 -0000 1.12
+++ FilenameUtils.java 24 Oct 2004 18:34:23 -0000 1.13
@@ -53,12 +53,23 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Jeff Turner</a>
* @author Matthew Hawthorne
+ * @author Martin Cooper
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
* @version $Id$
*/
public class FilenameUtils {
/**
+ * Standard separator char used when internalizing paths.
+ */
+ private static final char INTERNAL_SEPARATOR_CHAR = '/';
+
+ /**
+ * Standard separator string used when internalizing paths.
+ */
+ private static final String INTERNAL_SEPARATOR = "/";
+
+ /**
* Instances should NOT be constructed in standard programming.
*/
public FilenameUtils() { }
@@ -140,10 +151,11 @@
public static String getExtension(final String filename) {
String suffix = "";
String shortFilename = filename;
+ String ifilename = internalize(filename);
- int lastDirSeparator = filename.lastIndexOf(File.separatorChar);
+ int lastDirSeparator = ifilename.lastIndexOf(INTERNAL_SEPARATOR_CHAR);
if (lastDirSeparator > 0) {
- shortFilename = filename.substring(lastDirSeparator + 1);
+ shortFilename = ifilename.substring(lastDirSeparator + 1);
}
int index = shortFilename.lastIndexOf('.');
@@ -429,6 +441,28 @@
return file;
}
+ /**
+ * Convert all separators to the internal form. This allows manipulation
+ * of paths without concern for which separators are used within them.
+ * @param path The path to be internalized.
+ * @return The internalized path.
+ */
+ private static String internalize(String path) {
+ return path.replace('\\', INTERNAL_SEPARATOR_CHAR);
+ }
+
+ /**
+ * Convert all separators to their external form. That is, ensure that all
+ * separators are the same as File.separator.
+ * @param path The path to be externalized.
+ * @return The externalized path.
+ */
+ private static String externalize(String path) {
+ if (INTERNAL_SEPARATOR_CHAR != File.separatorChar) {
+ path = path.replace(INTERNAL_SEPARATOR_CHAR, File.separatorChar);
+ }
+ return path;
+ }
// DEPRECATED. Though no replacement exists.
1.11 +16 -19
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.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- FilenameUtilsTestCase.java 24 Oct 2004 01:27:13 -0000 1.10
+++ FilenameUtilsTestCase.java 24 Oct 2004 18:34:23 -0000 1.11
@@ -29,6 +29,7 @@
*
* @author Peter Donald
* @author Matthew Hawthorne
+ * @author Martin Cooper
* @version $Id$
* @see FilenameUtils
*/
@@ -220,13 +221,13 @@
public void testGetExtensionWithPaths() {
String[][] testsWithPaths =
- { { File.separator + "tmp" + File.separator + "foo" + File.separator +
"filename.ext", "ext" }, {
- //"C:\\temp\\foo\\filename.ext", "ext" }, {
- File.separator + "tmp" + File.separator + "foo.bar" +
File.separator + "filename.ext", "ext" }, {
- //"C:\\temp\\foo.bar\\filename.ext", "ext" }, {
- File.separator + "tmp" + File.separator + "foo.bar" +
File.separator + "README", "" }, {
- //"C:\\temp\\foo.bar\\README", "" }, {
- ".." + File.separator + "filename.ext", "ext" }
+ { { "/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(
@@ -256,17 +257,13 @@
public void testRemoveExtensionWithPaths() {
String[][] testsWithPaths =
- { { File.separator + "tmp" + File.separator + "foo" + File.separator +
"filename.ext",
- File.separator + "tmp" + File.separator + "foo" + File.separator +
"filename" }, {
- //"C:\\temp\\foo\\filename.ext", "filename" }, {
- File.separator + "tmp" + File.separator + "foo.bar" +
File.separator + "filename.ext",
- File.separator + "tmp" + File.separator + "foo.bar" +
File.separator + "filename" }, {
- //"C:\\temp\\foo.bar\\filename.ext", "filename" }, {
- File.separator + "tmp" + File.separator + "foo.bar" +
File.separator + "README",
- File.separator + "tmp" + File.separator + "foo.bar" +
File.separator + "README" }, {
- //"C:\\temp\\foo.bar\\README", "README" }, {
- ".." + File.separator + "filename.ext",
- ".." + File.separator + "filename" }
+ { { "/tmp/foo/filename.ext", "/tmp/foo/filename" }, {
+ "C:\\temp\\foo\\filename.ext", "C:\\temp\\foo\\filename" }, {
+ "/tmp/foo.bar/filename.ext", "/tmp/foo.bar/filename" }, {
+ "C:\\temp\\foo.bar\\filename.ext", "C:\\temp\\foo.bar\\filename" },
{
+ "/tmp/foo.bar/README", "/tmp/foo.bar/README" }, {
+ "C:\\temp\\foo.bar\\README", "C:\\temp\\foo.bar\\README" }, {
+ "../filename.ext", "../filename" }
};
for (int i = 0; i < testsWithPaths.length; i++) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]