cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/12/04 11:28:40 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Add equals methods, document Unix/Windows behaviour Revision ChangesPath 1.23 +23 -1 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.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- FilenameUtilsTestCase.java27 Nov 2004 17:00:51 - 1.22 +++ FilenameUtilsTestCase.java4 Dec 2004 19:28:40 - 1.23 @@ -451,6 +451,28 @@ } //--- +public void testEquals() { +assertEquals(true, FilenameUtils.equals(null, null)); +assertEquals(false, FilenameUtils.equals(null, )); +assertEquals(false, FilenameUtils.equals(, null)); +assertEquals(true, FilenameUtils.equals(, )); +assertEquals(true, FilenameUtils.equals(file.txt, file.txt)); +assertEquals(WINDOWS, FilenameUtils.equals(file.txt, FILE.TXT)); +assertEquals(false, FilenameUtils.equals(a\\b\\file.txt, a/b/file.txt)); +} + +public void testEqualsNormalized() { +assertEquals(true, FilenameUtils.equalsNormalized(null, null)); +assertEquals(false, FilenameUtils.equalsNormalized(null, )); +assertEquals(false, FilenameUtils.equalsNormalized(, null)); +assertEquals(true, FilenameUtils.equalsNormalized(, )); +assertEquals(true, FilenameUtils.equalsNormalized(file.txt, file.txt)); +assertEquals(WINDOWS, FilenameUtils.equalsNormalized(file.txt, FILE.TXT)); +assertEquals(true, FilenameUtils.equalsNormalized(a\\b\\file.txt, a/b/file.txt)); +assertEquals(true, FilenameUtils.equalsNormalized(a\\b\\, a/b)); +} + +//--- public void testIsExtension() { assertEquals(false, FilenameUtils.isExtension(null, (String) null)); assertEquals(false, FilenameUtils.isExtension(file.txt, (String) null)); 1.31 +134 -26 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.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- FilenameUtils.java27 Nov 2004 17:00:51 - 1.30 +++ FilenameUtils.java4 Dec 2004 19:28:40 - 1.31 @@ -22,6 +22,16 @@ /** * Utility class that provides methods to manipulate filenames and filepaths. * p + * When dealing with filenames you can hit problems when moving from a Windows + * based development machine to a Unix based production machine. + * This class aims to help avoid those problems. + * p + * Most methods on this class are designed to work the same on both Unix and Windows. + * Both separators (forward and back) are recognised, and both sets of prefixes. + * The comparison methods do differ by machine however, comparing case insensitive + * on Windows and case sensitive on Unix. + * See the javadoc of each method for details. + * p * This class defines six components within a filename (example C:\dev\project\file.txt): * ul * lithe prefix - C:\/li @@ -31,7 +41,9 @@ * lithe base name - file/li * lithe extension - txt/li * /ul - * The class only supports Unix and Windows style names. Prefixes are matched as follows: + * Note that the path of a directory is the parent directory. + * p + * This class only supports Unix and Windows style names. Prefixes are matched as follows: * pre * Windows style: * a\b\c.txt -- -- relative @@ -45,6 +57,8 @@ * ~/a/b/c.txt -- ~/-- current user relative * ~user/a/b/c.txt -- ~user/-- named user relative * /pre + * Both prefix styles are matched always, irrespective of the machine that you are + * currently running on. * * /p * h3Origin of code/h3 @@ -133,6 +147,9 @@ * A double dot will cause that path segment and the one before to be removed. * If the double dot has no parent path segment to work with, codenull/code * is returned. + * p + * The output will be the same on both Unix and Windows except + * for the separator character. * pre * /foo// -- /foo * /foo/./ -- /foo @@ -151,7 +168,7 @@ * ~/foo/../bar
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/11/27 09:00:51 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Rewrite catPath, renaming to concat Revision ChangesPath 1.22 +32 -13 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.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- FilenameUtilsTestCase.java27 Nov 2004 01:22:05 - 1.21 +++ FilenameUtilsTestCase.java27 Nov 2004 17:00:51 - 1.22 @@ -82,18 +82,6 @@ } //--- -public void testCatPath() { -// TODO StringIndexOutOfBoundsException thrown if file doesn't contain slash. -// Is this acceptable? -//assertEquals(, FilenameUtils.catPath(a, b)); - -assertEquals(/a + File.separator + c, FilenameUtils.catPath(/a/b, c)); -assertEquals(/a + File.separator + d, FilenameUtils.catPath(/a/b/c, ../d)); -assertEquals(C:\\a + File.separator + c, FilenameUtils.catPath(C:\\a\\b, c)); -assertEquals(C:\\a + File.separator + d, FilenameUtils.catPath(C:\\a\\b\\c, ../d)); -} - -//--- public void testNormalize() throws Exception { assertEquals(null, FilenameUtils.normalize(null)); assertEquals(null, FilenameUtils.normalize(:)); @@ -213,6 +201,37 @@ assertEquals(null, FilenameUtils.normalize(//server/../a)); assertEquals(null, FilenameUtils.normalize(//server/..)); assertEquals(SEP + SEP + server + SEP + , FilenameUtils.normalize(//server/)); +} + +//--- +public void testConcat() { +assertEquals(null, FilenameUtils.concat(, null)); +assertEquals(null, FilenameUtils.concat(null, null)); +assertEquals(null, FilenameUtils.concat(null, )); +assertEquals(null, FilenameUtils.concat(null, a)); +assertEquals(SEP + a, FilenameUtils.concat(null, /a)); + +assertEquals(null, FilenameUtils.concat(, :)); // invalid prefix +assertEquals(null, FilenameUtils.concat(:, )); // invalid prefix + +assertEquals(f, FilenameUtils.concat(, f/)); +assertEquals(f, FilenameUtils.concat(, f)); +assertEquals(a + SEP + f, FilenameUtils.concat(a/, f/)); +assertEquals(a + SEP + f, FilenameUtils.concat(a, f)); +assertEquals(a + SEP + b + SEP + f, FilenameUtils.concat(a/b/, f/)); +assertEquals(a + SEP + b + SEP + f, FilenameUtils.concat(a/b, f)); + +assertEquals(a + SEP + f, FilenameUtils.concat(a/b/, ../f/)); +assertEquals(a + SEP + f, FilenameUtils.concat(a/b, ../f)); +assertEquals(a + SEP + c + SEP + g, FilenameUtils.concat(a/b/../c/, f/../g/)); +assertEquals(a + SEP + c + SEP + g, FilenameUtils.concat(a/b/../c, f/../g)); + +assertEquals(a + SEP + c.txt + SEP + f, FilenameUtils.concat(a/c.txt, f)); + +assertEquals(SEP + f, FilenameUtils.concat(, /f/)); +assertEquals(SEP + f, FilenameUtils.concat(, /f)); +assertEquals(SEP + f, FilenameUtils.concat(a/, /f/)); +assertEquals(SEP + f, FilenameUtils.concat(a, /f)); } //--- 1.30 +71 -47 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.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- FilenameUtils.java27 Nov 2004 01:22:05 - 1.29 +++ FilenameUtils.java27 Nov 2004 17:00:51 - 1.30 @@ -31,13 +31,28 @@ * lithe base name - file/li * lithe extension - txt/li * /ul - * The class only supports Unix and Windows style names. + * The class only supports Unix and Windows style names. Prefixes are matched as follows: + * pre + * Windows style: + * a\b\c.txt -- -- relative + * \a\b\c.txt -- \ -- drive relative + * C:\a\b\c.txt-- C:\ -- absolute + * \\server\a\b\c.txt -- \\server\ -- UNC + * + * Unix style: + * a/b/c.txt -- -- relative + * /a/b/c.txt -- / -- absolute + * ~/a/b/c.txt -- ~/
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
martinc 2004/11/26 11:18:28 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: Fix breakage when getPrefixLength() is fed a string of length one. Revision ChangesPath 1.28 +1 -2 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.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- FilenameUtils.java23 Nov 2004 00:04:29 - 1.27 +++ FilenameUtils.java26 Nov 2004 19:18:28 - 1.28 @@ -416,7 +416,6 @@ } } else { char ch0 = filename.charAt(0); -char ch1 = filename.charAt(1); if (ch0 == '~') { if (len == 1) { return -1; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/11/26 17:22:06 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Refactor normalize method, and simplify getPrefixLength Revision ChangesPath 1.21 +204 -216 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.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- FilenameUtilsTestCase.java23 Nov 2004 00:04:29 - 1.20 +++ FilenameUtilsTestCase.java27 Nov 2004 01:22:05 - 1.21 @@ -38,6 +38,7 @@ */ public class FilenameUtilsTestCase extends FileBasedTestCase { +private static final String SEP = + File.separatorChar; private static final boolean WINDOWS = (File.separatorChar == '\\'); private File testFile1; @@ -80,8 +81,7 @@ FileUtils.deleteDirectory(getTestDirectory()); } -// catPath - +//--- public void testCatPath() { // TODO StringIndexOutOfBoundsException thrown if file doesn't contain slash. // Is this acceptable? @@ -93,96 +93,126 @@ assertEquals(C:\\a + File.separator + d, FilenameUtils.catPath(C:\\a\\b\\c, ../d)); } -// resolveFile - -public void testResolveFileDotDot() throws Exception { -File file = FilenameUtils.resolveFile(getTestDirectory(), ..); -assertEquals( -Check .. operator, -file, -getTestDirectory().getParentFile()); -} - -public void testResolveFileDot() throws Exception { -File file = FilenameUtils.resolveFile(getTestDirectory(), .); -assertEquals(Check . operator, file, getTestDirectory()); -} - -// normalize - +//--- public void testNormalize() throws Exception { -String[] src = -{ -null, -, -/, -///, -/foo, -/foo//, -/./, -/foo/./, -/foo/./bar, -/foo/../bar, -/foo/../bar/../baz, -/foo/bar/../../baz, -/././, -/foo/./../bar, -/foo/.././bar/, -//foo//./bar, -/../, -/foo/../../, -../foo, -foo/../../bar, -foo/../bar }; - -String[] dest = -{ -null, -, -/, -/, -/foo, -/foo/, -/, -/foo/, -/foo/bar, -/bar, -/baz, -/baz, -/, -/bar, -/bar/, -/foo/bar, -null, -null, -null, -null, -bar }; - -assertEquals(Oops, test writer goofed, src.length, dest.length); - -for (int i = 0; i src.length; i++) { -String destStr = FilenameUtils.separatorsToSystem(dest[i]); -String resultStr = FilenameUtils.normalize(src[i]); -assertEquals( -Check if ' + src[i] + ' normalized to ' + destStr + ', was ' + resultStr + ', -destStr, resultStr); -} -} - -private String replaceAll( -String text, -String lookFor, -String replaceWith) { -StringBuffer sb = new StringBuffer(text); -while (true) { -int idx = sb.toString().indexOf(lookFor); -if (idx 0) { -break; -} -sb.replace(idx, idx + lookFor.length(), replaceWith); -} -return sb.toString(); +assertEquals(null, FilenameUtils.normalize(null)); +assertEquals(null, FilenameUtils.normalize(:)); +assertEquals(null, FilenameUtils.normalize(1:\\a\\b\\c.txt)); +assertEquals(null, FilenameUtils.normalize(1:)); +assertEquals(null, FilenameUtils.normalize(1:a)); +assertEquals(null, FilenameUtils.normalize(\\a\\b\\c.txt)); +assertEquals(null, FilenameUtils.normalize(a)); +assertEquals(null, FilenameUtils.normalize(~)); +assertEquals(null, FilenameUtils.normalize(~user)); + +
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/11/22 16:04:29 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Add methods to handle filename prefixes Revision ChangesPath 1.20 +166 -6 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.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- FilenameUtilsTestCase.java31 Oct 2004 00:03:03 - 1.19 +++ FilenameUtilsTestCase.java23 Nov 2004 00:04:29 - 1.20 @@ -113,6 +113,7 @@ public void testNormalize() throws Exception { String[] src = { +null, , /, ///, @@ -129,10 +130,14 @@ /foo/.././bar/, //foo//./bar, /../, -/foo/../../ }; +/foo/../../, +../foo, +foo/../../bar, +foo/../bar }; String[] dest = { +null, , /, /, @@ -149,15 +154,19 @@ /bar/, /foo/bar, null, -null }; +null, +null, +null, +bar }; assertEquals(Oops, test writer goofed, src.length, dest.length); for (int i = 0; i src.length; i++) { +String destStr = FilenameUtils.separatorsToSystem(dest[i]); +String resultStr = FilenameUtils.normalize(src[i]); assertEquals( -Check if ' + src[i] + ' normalized to ' + dest[i] + ', -dest[i], -FilenameUtils.normalize(src[i])); +Check if ' + src[i] + ' normalized to ' + destStr + ', was ' + resultStr + ', +destStr, resultStr); } } @@ -214,6 +223,46 @@ } //--- +public void testGetPrefixLength() { +assertEquals(-1, FilenameUtils.getPrefixLength(null)); +if (WINDOWS) { +assertEquals(-1, FilenameUtils.getPrefixLength(1:\\a\\b\\c.txt)); +assertEquals(-1, FilenameUtils.getPrefixLength(1:)); +assertEquals(-1, FilenameUtils.getPrefixLength(1:a)); +assertEquals(-1, FilenameUtils.getPrefixLength(\\a\\b\\c.txt)); +assertEquals(-1, FilenameUtils.getPrefixLength(a)); + +assertEquals(0, FilenameUtils.getPrefixLength(a\\b\\c.txt)); +assertEquals(1, FilenameUtils.getPrefixLength(\\a\\b\\c.txt)); +assertEquals(3, FilenameUtils.getPrefixLength(C:\\a\\b\\c.txt)); +assertEquals(9, FilenameUtils.getPrefixLength(server\\a\\b\\c.txt)); + +assertEquals(0, FilenameUtils.getPrefixLength(a/b/c.txt)); +assertEquals(1, FilenameUtils.getPrefixLength(/a/b/c.txt)); +assertEquals(3, FilenameUtils.getPrefixLength(C:/a/b/c.txt)); +assertEquals(9, FilenameUtils.getPrefixLength(//server/a/b/c.txt)); + +assertEquals(0, FilenameUtils.getPrefixLength(~/a/b/c.txt)); +assertEquals(0, FilenameUtils.getPrefixLength(~user/a/b/c.txt)); +} else { +assertEquals(-1, FilenameUtils.getPrefixLength(~)); +assertEquals(-1, FilenameUtils.getPrefixLength(~user)); + +assertEquals(0, FilenameUtils.getPrefixLength(a/b/c.txt)); +assertEquals(1, FilenameUtils.getPrefixLength(/a/b/c.txt)); +assertEquals(2, FilenameUtils.getPrefixLength(~/a/b/c.txt)); +assertEquals(6, FilenameUtils.getPrefixLength(~user/a/b/c.txt)); + +assertEquals(0, FilenameUtils.getPrefixLength(a\\b\\c.txt)); +assertEquals(1, FilenameUtils.getPrefixLength(\\a\\b\\c.txt)); +assertEquals(2, FilenameUtils.getPrefixLength(~\\a\\b\\c.txt)); +assertEquals(6, FilenameUtils.getPrefixLength(~user\\a\\b\\c.txt)); + +assertEquals(0, FilenameUtils.getPrefixLength(C:\\a\\b\\c.txt)); +assertEquals(1, FilenameUtils.getPrefixLength(server\\a\\b\\c.txt)); +} +} + public void testIndexOfLastSeparator() { assertEquals(-1, FilenameUtils.indexOfLastSeparator(null)); assertEquals(-1, FilenameUtils.indexOfLastSeparator(noseperator.inthispath)); @@
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/11/21 17:11:56 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: Add commented out implementations of prefix handling, Javadoc Revision ChangesPath 1.26 +218 -17 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.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- FilenameUtils.java31 Oct 2004 04:17:34 - 1.25 +++ FilenameUtils.java22 Nov 2004 01:11:55 - 1.26 @@ -23,9 +23,10 @@ /** * Utility class that provides methods to manipulate filenames and filepaths. * p - * This class defines three basic components within a filename (example C:\dev\file.txt): + * This class defines four basic components within a filename (example C:\dev\project\file.txt): * ul - * lithe path - C:\dev + * lithe prefix - C:\ + * lithe path - dev\project * lithe name - file.txt * lithe extension - txt * /ul @@ -90,11 +91,119 @@ */ private static final char SYSTEM_SEPARATOR = File.separatorChar; +///** +// * The separator character that is the opposite of the system separator. +// */ +//private static final char OTHER_SEPARATOR; +//static { +//if (SYSTEM_SEPARATOR == WINDOWS_SEPARATOR) { +//OTHER_SEPARATOR = UNIX_SEPARATOR; +//} else { +//OTHER_SEPARATOR = WINDOWS_SEPARATOR; +//} +//} + /** * Instances should NOT be constructed in standard programming. */ public FilenameUtils() { } +// //--- +///** +// * Checks if the character is a separator. +// * +// * @param ch the character to check +// * @return true if it is a separators +// */ +//private static boolean isSeparator(char ch) { +//return (ch == UNIX_SEPARATOR) || (ch == WINDOWS_SEPARATOR); +//} +// +// //--- +///** +// * Normalizes a path, removing double and single dot path steps. +// * p +// * This method normalizes a path to a standard format. +// * The input may contain separators in either Unix or Windows format. +// * The output will contain separators in the format of the system. +// * p +// * A double slash will be merged to a single slash (thus UNC names are not handled). +// * A single dot path segment will be removed with no other effect. +// * A double dot will cause that path segment and the one before to be removed. +// * If the double dot has no parent path segment to work with, codenull/code +// * is returned. +// * pre +// * /foo// -- /foo/ +// * /foo/./ -- /foo/ +// * /foo/../bar -- /bar +// * /foo/../bar/ -- /bar/ +// * /foo/../bar/../baz -- /baz +// * //foo//./bar -- /foo/bar +// * /../ -- null +// * ../foo -- null +// * foo/../../bar-- null +// * foo/../bar -- bar +// * /pre +// * +// * @param path the path to normalize, null returns null +// * @return the normalized String, or null if too many ..'s. +// * @todo prefixes for Windows +// */ +//public static String normalize(String path) { +//if (path == null) { +//return null; +//} +//char[] array = path.toCharArray(); +//int size = array.length; +//// fix separators +//for (int i = 0; i array.length; i++) { +//if (array[i] == OTHER_SEPARATOR) { +//array[i] = SYSTEM_SEPARATOR; +//} +//} +//// adjoining slashes +//for (int i = 1; i size; i++) { +//if (array[i] == SYSTEM_SEPARATOR array[i - 1] == SYSTEM_SEPARATOR) { +//System.arraycopy(array, i, array, i - 1, size - i); +//size--; +//i--; +//} +//} +//// dot slash +//for (int i = 2; i size; i++) { +//if (array[i] == SYSTEM_SEPARATOR array[i - 1] == '.' +//array[i - 2] == SYSTEM_SEPARATOR) { +//System.arraycopy(array, i, array, i - 2, size - i); +//size -=2; +//i--; +//} +//} +//// double dot slash +//outer: +//for (int i = 2; i size; i++) { +//if (array[i] == SYSTEM_SEPARATOR array[i -
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/10/30 15:16:23 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Add separatorsToXxx methods to FilenameUtils Revision ChangesPath 1.13 +38 -1 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.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- FilenameUtilsTestCase.java24 Oct 2004 18:44:51 - 1.12 +++ FilenameUtilsTestCase.java30 Oct 2004 22:16:23 - 1.13 @@ -274,4 +274,41 @@ } } +//--- +public void testSeparatorsToUnix() { +assertEquals(null, FilenameUtils.separatorsToUnix(null)); +assertEquals(/a/b/c, FilenameUtils.separatorsToUnix(/a/b/c)); +assertEquals(/a/b/c.txt, FilenameUtils.separatorsToUnix(/a/b/c.txt)); +assertEquals(/a/b/c, FilenameUtils.separatorsToUnix(/a/b\\c)); +assertEquals(/a/b/c, FilenameUtils.separatorsToUnix(\\a\\b\\c)); +assertEquals(D:/a/b/c, FilenameUtils.separatorsToUnix(D:\\a\\b\\c)); +} + +public void testSeparatorsToWindows() { +assertEquals(null, FilenameUtils.separatorsToWindows(null)); +assertEquals(\\a\\b\\c, FilenameUtils.separatorsToWindows(\\a\\b\\c)); +assertEquals(\\a\\b\\c.txt, FilenameUtils.separatorsToWindows(\\a\\b\\c.txt)); +assertEquals(\\a\\b\\c, FilenameUtils.separatorsToWindows(\\a\\b/c)); +assertEquals(\\a\\b\\c, FilenameUtils.separatorsToWindows(/a/b/c)); +assertEquals(D:\\a\\b\\c, FilenameUtils.separatorsToWindows(D:/a/b/c)); +} + +public void testSeparatorsToSystem() { +if (File.separatorChar == '/') { +assertEquals(null, FilenameUtils.separatorsToSystem(null)); +assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(/a/b/c)); +assertEquals(/a/b/c.txt, FilenameUtils.separatorsToSystem(/a/b/c.txt)); +assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(/a/b\\c)); +assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(\\a\\b\\c)); +assertEquals(D:/a/b/c, FilenameUtils.separatorsToSystem(D:\\a\\b\\c)); +} else { +assertEquals(null, FilenameUtils.separatorsToSystem(null)); +assertEquals(\\a\\b\\c, FilenameUtils.separatorsToSystem(\\a\\b\\c)); +assertEquals(\\a\\b\\c.txt, FilenameUtils.separatorsToSystem(\\a\\b\\c.txt)); +assertEquals(\\a\\b\\c, FilenameUtils.separatorsToSystem(\\a\\b/c)); +assertEquals(\\a\\b\\c, FilenameUtils.separatorsToSystem(/a/b/c)); +assertEquals(D:\\a\\b\\c, FilenameUtils.separatorsToSystem(D:/a/b/c)); +} +} + } 1.19 +65 -1 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.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- FilenameUtils.java29 Oct 2004 21:38:49 - 1.18 +++ FilenameUtils.java30 Oct 2004 22:16:23 - 1.19 @@ -55,6 +55,7 @@ * @author Matthew Hawthorne * @author Martin Cooper * @author a href=mailto:[EMAIL PROTECTED]Jeremias Maerki/a + * @author Stephen Colebourne * @version $Id$ * @since Commons IO 1.1 */ @@ -66,6 +67,21 @@ private static final char INTERNAL_SEPARATOR_CHAR = '/'; /** + * The Unix separator character. + */ +private static final char UNIX_SEPARATOR = '/'; + +/** + * The Windows separator character. + */ +private static final char WINDOWS_SEPARATOR = '\\'; + +/** + * The system separator character. + */ +private static final char SYSTEM_SEPARATOR = File.separatorChar; + +/** * Standard separator string used when internalizing paths. */ // KILL? It's here to match symmetry of File.separator and to promote its use @@ -472,6 +488,54 @@ if (INTERNAL_SEPARATOR_CHAR != File.separatorChar) { path = path.replace(INTERNAL_SEPARATOR_CHAR, File.separatorChar); } +return path; +} + +//--- +/** + * Convert all separators to the Unix separator of forward slash. + * + * @param path the path to be changed, null ignored + *
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/10/30 15:41:57 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Add indexOfXxx methods to FilenameUtils Revision ChangesPath 1.14 +20 -7 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.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- FilenameUtilsTestCase.java30 Oct 2004 22:16:23 - 1.13 +++ FilenameUtilsTestCase.java30 Oct 2004 22:41:56 - 1.14 @@ -114,12 +114,6 @@ assertEquals(C:\\a + File.separator + d, FilenameUtils.catPath(C:\\a\\b\\c, ../d)); } -public void testIndexOfLastPathSeparator() { -assertEquals(-1, FilenameUtils.indexOfLastPathSeparator(noseperator.inthispath)); -assertEquals(3, FilenameUtils.indexOfLastPathSeparator(a/b/c)); -assertEquals(3, FilenameUtils.indexOfLastPathSeparator(a\\b\\c)); -} - // resolveFile public void testResolveFileDotDot() throws Exception { @@ -309,6 +303,25 @@ assertEquals(\\a\\b\\c, FilenameUtils.separatorsToSystem(/a/b/c)); assertEquals(D:\\a\\b\\c, FilenameUtils.separatorsToSystem(D:/a/b/c)); } +} + +//--- +public void testIndexOfLastSeparator() { +assertEquals(-1, FilenameUtils.indexOfLastSeparator(null)); +assertEquals(-1, FilenameUtils.indexOfLastSeparator(noseperator.inthispath)); +assertEquals(3, FilenameUtils.indexOfLastSeparator(a/b/c)); +assertEquals(3, FilenameUtils.indexOfLastSeparator(a\\b\\c)); +} + +public void testIndexOfExtension() { +assertEquals(-1, FilenameUtils.indexOfExtension(null)); +assertEquals(-1, FilenameUtils.indexOfExtension(file)); +assertEquals(4, FilenameUtils.indexOfExtension(file.txt)); +assertEquals(13, FilenameUtils.indexOfExtension(a.txt/b.txt/c.txt)); +assertEquals(-1, FilenameUtils.indexOfExtension(a/b/c)); +assertEquals(-1, FilenameUtils.indexOfExtension(a\\b\\c)); +assertEquals(-1, FilenameUtils.indexOfExtension(a/b.notextension/c)); +assertEquals(-1, FilenameUtils.indexOfExtension(a\\b.notextension\\c)); } } 1.20 +63 -31 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.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- FilenameUtils.java30 Oct 2004 22:16:23 - 1.19 +++ FilenameUtils.java30 Oct 2004 22:41:57 - 1.20 @@ -19,9 +19,16 @@ import java.io.IOException; /** - * Common [EMAIL PROTECTED] java.io.File} manipulation routines through - * use of a filename/path. - * + * Utility class that provides methods to manipulate filenames and filepaths. + * p + * This class defines three basic components within a filename (example C:\dev\file.txt): + * ul + * lithe path - C:\dev + * lithe name - file.txt + * lithe extension - txt + * /ul + * The class only supports Unix and Windows style names. + * * h3Path-related methods/h3 * * pMethods exist to retrieve the components of a typical file path. For @@ -67,6 +74,11 @@ private static final char INTERNAL_SEPARATOR_CHAR = '/'; /** + * The extension separator character. + */ +private static final char EXTENSION_SEPARATOR = '.'; + +/** * The Unix separator character. */ private static final char UNIX_SEPARATOR = '/'; @@ -356,14 +368,14 @@ // TODO UNIX/Windows only. Is this a problem? public static String catPath(String lookupPath, String path) { // Cut off the last slash and everything beyond -int index = indexOfLastPathSeparator(lookupPath); +int index = indexOfLastSeparator(lookupPath); String lookup = lookupPath.substring(0, index); String pth = path; // Deal with .. by chopping dirs off the lookup path while (pth.startsWith(../) || pth.startsWith(..\\)) { if (lookup.length() 0) { -index = indexOfLastPathSeparator(lookup); +index = indexOfLastSeparator(lookup); lookup = lookup.substring(0, index); } else { // More ..'s than dirs, return null @@ -378,22 +390,6
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/10/30 15:43:21 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Remove File based methods as this is a Filename class Revision ChangesPath 1.15 +1 -9 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.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- FilenameUtilsTestCase.java30 Oct 2004 22:41:56 - 1.14 +++ FilenameUtilsTestCase.java30 Oct 2004 22:43:21 - 1.15 @@ -75,14 +75,6 @@ FileUtils.deleteDirectory(getTestDirectory()); } -// mkdir - -public void testMkdir() { -File dir = new File(getTestDirectory(), testdir); -FilenameUtils.mkdir(dir.getAbsolutePath()); -dir.deleteOnExit(); -} - // removePath public void testRemovePath() { 1.21 +1 -39 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.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- FilenameUtils.java30 Oct 2004 22:41:57 - 1.20 +++ FilenameUtils.java30 Oct 2004 22:43:21 - 1.21 @@ -105,44 +105,6 @@ public FilenameUtils() { } /** - * Check if a file exits. - * - * @param fileName The name of the file to check. - * @return true if file exists. - */ -// KILL: Not filename based -public static boolean fileExists(String fileName) { -File file = new File(fileName); -return file.exists(); -} - - - -/** - * Deletes a file. - * - * @param fileName The name of the file to delete. - */ -// KILL: Not filename based -public static void fileDelete(String fileName) { -File file = new File(fileName); -file.delete(); -} - -/** - * Simple way to make a directory. It also creates the parent directories - * if necessary. - * @param dir directory to create - */ -// KILL: Not filename based -public static void mkdir(String dir) { -File file = new File(dir); -if (!file.exists()) { -file.mkdirs(); -} -} - -/** * Remove extension from filename. * ie * pre - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/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 ChangesPath 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.java30 Oct 2004 22:43:21 - 1.15 +++ FilenameUtilsTestCase.java30 Oct 2004 23:12:18 - 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,
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/10/30 16:23:54 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Update removeExtension method and remove unused code from FilenameUtils Revision ChangesPath 1.17 +18 -39 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.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- FilenameUtilsTestCase.java30 Oct 2004 23:12:18 - 1.16 +++ FilenameUtilsTestCase.java30 Oct 2004 23:23:53 - 1.17 @@ -171,43 +171,6 @@ return sb.toString(); } -public void testRemoveExtension() { -String[][] tests = { -{ filename.ext, filename }, -{ first.second.third.ext, first.second.third }, -{ README, README }, -{ domain.dot.com, domain.dot }, -{ image.jpeg, image }, -{ a.b/c, a.b/c }, -{ a.b/c.txt, a.b/c }, -{ a/b/c, a/b/c }, -}; - -for (int i = 0; i tests.length; i++) { -assertEquals(tests[i][1], FilenameUtils.removeExtension(tests[i][0])); -//assertEquals(tests[i][1], FilenameUtils.basename(tests[i][0])); -} -} - -public void testRemoveExtensionWithPaths() { -String[][] testsWithPaths = -{ { /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++) { -assertEquals( -testsWithPaths[i][1], -FilenameUtils.removeExtension(testsWithPaths[i][0])); -//assertEquals(testsWithPaths[i][1], FilenameUtils.basename(testsWithPaths[i][0])); -} -} - //--- public void testSeparatorsToUnix() { assertEquals(null, FilenameUtils.separatorsToUnix(null)); @@ -274,7 +237,7 @@ assertEquals(a\\b, FilenameUtils.getPath(a\\b\\c)); } -public void testRemovePath() { +public void testGetName() { assertEquals(null, FilenameUtils.getName(null)); assertEquals(noseperator.inthispath, FilenameUtils.getName(noseperator.inthispath)); assertEquals(c.txt, FilenameUtils.getName(a/b/c.txt)); @@ -297,6 +260,22 @@ assertEquals(, FilenameUtils.getExtension(a\\b\\c)); assertEquals(, FilenameUtils.getExtension(C:\\temp\\foo.bar\\README)); assertEquals(ext, FilenameUtils.getExtension(../filename.ext)); +} + +public void testRemoveExtension() { +assertEquals(null, FilenameUtils.removeExtension(null)); +assertEquals(file, FilenameUtils.removeExtension(file.ext)); +assertEquals(README, FilenameUtils.removeExtension(README)); +assertEquals(domain.dot, FilenameUtils.removeExtension(domain.dot.com)); +assertEquals(image, FilenameUtils.removeExtension(image.jpeg)); +assertEquals(a.b/c, FilenameUtils.removeExtension(a.b/c)); +assertEquals(a.b/c, FilenameUtils.removeExtension(a.b/c.txt)); +assertEquals(a/b/c, FilenameUtils.removeExtension(a/b/c)); +assertEquals(a.b\\c, FilenameUtils.removeExtension(a.b\\c)); +assertEquals(a.b\\c, FilenameUtils.removeExtension(a.b\\c.txt)); +assertEquals(a\\b\\c, FilenameUtils.removeExtension(a\\b\\c)); +assertEquals(C:\\temp\\foo.bar\\README, FilenameUtils.removeExtension(C:\\temp\\foo.bar\\README)); +assertEquals(../filename, FilenameUtils.removeExtension(../filename.ext)); } } 1.23 +33 -64 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.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- FilenameUtils.java30 Oct 2004 23:12:18 - 1.22 +++ FilenameUtils.java30 Oct 2004 23:23:54 - 1.23 @@ -69,11 +69,6 @@ public
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/10/30 16:59:17 Modified:io/src/test/org/apache/commons/io FilenameUtilsTestCase.java io/src/java/org/apache/commons/io FilenameUtils.java Log: Add isExtension methods to test for matching extensions in FilenameUtils Revision ChangesPath 1.18 +132 -10 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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- FilenameUtilsTestCase.java30 Oct 2004 23:23:53 - 1.17 +++ FilenameUtilsTestCase.java30 Oct 2004 23:59:17 - 1.18 @@ -17,13 +17,16 @@ import java.io.File; import java.io.IOException; - -import org.apache.commons.io.testtools.FileBasedTestCase; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; +import org.apache.commons.io.testtools.FileBasedTestCase; + /** * This is used to test FilenameUtils for correctness. * @@ -34,6 +37,8 @@ * @see FilenameUtils */ public class FilenameUtilsTestCase extends FileBasedTestCase { + +private static final boolean WINDOWS = (File.separatorChar == '\\'); private File testFile1; private File testFile2; @@ -191,20 +196,20 @@ } public void testSeparatorsToSystem() { -if (File.separatorChar == '/') { -assertEquals(null, FilenameUtils.separatorsToSystem(null)); -assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(/a/b/c)); -assertEquals(/a/b/c.txt, FilenameUtils.separatorsToSystem(/a/b/c.txt)); -assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(/a/b\\c)); -assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(\\a\\b\\c)); -assertEquals(D:/a/b/c, FilenameUtils.separatorsToSystem(D:\\a\\b\\c)); -} else { +if (WINDOWS) { assertEquals(null, FilenameUtils.separatorsToSystem(null)); assertEquals(\\a\\b\\c, FilenameUtils.separatorsToSystem(\\a\\b\\c)); assertEquals(\\a\\b\\c.txt, FilenameUtils.separatorsToSystem(\\a\\b\\c.txt)); assertEquals(\\a\\b\\c, FilenameUtils.separatorsToSystem(\\a\\b/c)); assertEquals(\\a\\b\\c, FilenameUtils.separatorsToSystem(/a/b/c)); assertEquals(D:\\a\\b\\c, FilenameUtils.separatorsToSystem(D:/a/b/c)); +} else { +assertEquals(null, FilenameUtils.separatorsToSystem(null)); +assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(/a/b/c)); +assertEquals(/a/b/c.txt, FilenameUtils.separatorsToSystem(/a/b/c.txt)); +assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(/a/b\\c)); +assertEquals(/a/b/c, FilenameUtils.separatorsToSystem(\\a\\b\\c)); +assertEquals(D:/a/b/c, FilenameUtils.separatorsToSystem(D:\\a\\b\\c)); } } @@ -276,6 +281,123 @@ assertEquals(a\\b\\c, FilenameUtils.removeExtension(a\\b\\c)); assertEquals(C:\\temp\\foo.bar\\README, FilenameUtils.removeExtension(C:\\temp\\foo.bar\\README)); assertEquals(../filename, FilenameUtils.removeExtension(../filename.ext)); +} + +//--- +public void testIsExtension() { +assertEquals(false, FilenameUtils.isExtension(null, (String) null)); +assertEquals(false, FilenameUtils.isExtension(file.txt, (String) null)); +assertEquals(false, FilenameUtils.isExtension(file.txt, )); +assertEquals(true, FilenameUtils.isExtension(file.txt, txt)); +assertEquals(false, FilenameUtils.isExtension(file.txt, rtf)); + +assertEquals(false, FilenameUtils.isExtension(a/b/file.txt, (String) null)); +assertEquals(false, FilenameUtils.isExtension(a/b/file.txt, )); +assertEquals(true, FilenameUtils.isExtension(a/b/file.txt, txt)); +assertEquals(false, FilenameUtils.isExtension(a/b/file.txt, rtf)); + +assertEquals(false, FilenameUtils.isExtension(a.b/file.txt, (String) null)); +assertEquals(false, FilenameUtils.isExtension(a.b/file.txt, )); +assertEquals(true, FilenameUtils.isExtension(a.b/file.txt, txt)); +assertEquals(false, FilenameUtils.isExtension(a.b/file.txt, rtf)); + +assertEquals(false, FilenameUtils.isExtension(a\\b\\file.txt, (String) null)); +assertEquals(false, FilenameUtils.isExtension(a\\b\\file.txt, )); +assertEquals(true,
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
bayard 2004/10/29 11:28:03 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: not a style we use Revision ChangesPath 1.15 +3 -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.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- FilenameUtils.java25 Oct 2004 23:27:41 - 1.14 +++ FilenameUtils.java29 Oct 2004 18:28:03 - 1.15 @@ -123,7 +123,7 @@ * @param filename the filename * @return the filename minus extension */ -public static String removeExtension(final String filename) { +public static String removeExtension(String filename) { String ext = getExtension(filename); int index = ext.length(); if (index 0) { @@ -149,7 +149,7 @@ * @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(final String filename) { +public static String getExtension(String filename) { String suffix = ; String shortFilename = filename; String ifilename = internalize(filename); - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
bayard 2004/10/29 11:53:56 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: added an initial set of TODOs Revision ChangesPath 1.16 +15 -1 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.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- FilenameUtils.java29 Oct 2004 18:28:03 - 1.15 +++ FilenameUtils.java29 Oct 2004 18:53:56 - 1.16 @@ -68,6 +68,7 @@ /** * Standard separator string used when internalizing paths. */ +// KILL private static final String INTERNAL_SEPARATOR = /; /** @@ -81,6 +82,7 @@ * @param fileName The name of the file to check. * @return true if file exists. */ +// KILL: Not filename based public static boolean fileExists(String fileName) { File file = new File(fileName); return file.exists(); @@ -93,6 +95,7 @@ * * @param fileName The name of the file to delete. */ +// KILL: Not filename based public static void fileDelete(String fileName) { File file = new File(fileName); file.delete(); @@ -103,6 +106,7 @@ * if necessary. * @param dir directory to create */ +// KILL: Not filename based public static void mkdir(String dir) { File file = new File(dir); if (!file.exists()) { @@ -180,6 +184,7 @@ * @param filepath the filepath * @return the filename minus path */ +// KILL? Just use StringUtils? public static String removePath(String filepath) { return removePath(filepath, File.separatorChar); } @@ -196,6 +201,7 @@ * @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) { @@ -220,6 +226,7 @@ * @param filepath the filepath * @return the filename minus path */ +// KILL? Just use StringUtils? public static String getPath(String filepath) { return getPath(filepath, File.separatorChar); } @@ -236,6 +243,7 @@ * @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) { @@ -267,6 +275,7 @@ * @param path the path to normalize * @return the normalized String, or codenull/code if too many ..'s. */ +// TODO: Make this non-unix specific public static String normalize(String path) { String normalized = path; // Resolve occurrences of // in the normalized path @@ -332,6 +341,7 @@ * @param path path the second path to attach to the first * @return The concatenated paths, or null if error occurs */ +// TODO: UNIX/Windows only. Is this a problem? public static String catPath(String lookupPath, String path) { // Cut off the last slash and everything beyond int index = indexOfLastPathSeparator(lookupPath); @@ -364,6 +374,7 @@ * @return The index of the last 'path separator' character, or -1 if there * is no such character. */ +// KILL: Inline into above method public static int indexOfLastPathSeparator(String path) { int lastUnixPos = path.lastIndexOf('/'); int lastWindowsPos = path.lastIndexOf('\\'); @@ -381,6 +392,7 @@ * @param filename Absolute or relative file path to resolve. * @return The canonical codeFile/code of codefilename/code. */ +// TODO: Decide whether this is worth keeping? public static File resolveFile(File baseFile, String filename) { String filenm = filename; if ('/' != File.separatorChar) { @@ -448,6 +460,7 @@ * @param path The path to be internalized. * @return The internalized path. */ +// KILL: Inline into the one place this is used private static String internalize(String path) { return path.replace('\\', INTERNAL_SEPARATOR_CHAR); } @@ -458,6 +471,7 @@ * @param path The path to be externalized. * @return The externalized path. */ +// KILL: Nothing uses this private static String externalize(String path) { if (INTERNAL_SEPARATOR_CHAR != File.separatorChar) { path = path.replace(INTERNAL_SEPARATOR_CHAR,
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
bayard 2004/10/29 14:38:49 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: updated the KILL notes Revision ChangesPath 1.18 +8 -12 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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- FilenameUtils.java29 Oct 2004 21:34:56 - 1.17 +++ FilenameUtils.java29 Oct 2004 21:38:49 - 1.18 @@ -68,7 +68,7 @@ /** * Standard separator string used when internalizing paths. */ -// KILL +// KILL? It's here to match symmetry of File.separator and to promote its use private static final String INTERNAL_SEPARATOR = /; /** @@ -202,9 +202,7 @@ * @return the filename minus path */ // KILL: Why allow the char to be specified? -public static String removePath( -String filepath, -char fileSeparatorChar) { +public static String removePath( String filepath, char fileSeparatorChar) { int index = filepath.lastIndexOf(fileSeparatorChar); if (-1 == index) { @@ -244,9 +242,7 @@ * @return the filename minus path */ // KILL: Why allow the char to be specified? -public static String getPath( -String filepath, -char fileSeparatorChar) { +public static String getPath( String filepath, char fileSeparatorChar) { int index = filepath.lastIndexOf(fileSeparatorChar); if (-1 == index) { return ; @@ -340,8 +336,8 @@ * @param lookupPath the base path to attach to * @param path path the second path to attach to the first * @return The concatenated paths, or null if error occurs - * @todo UNIX/Windows only. Is this a problem? */ + // TODO UNIX/Windows only. Is this a problem? public static String catPath(String lookupPath, String path) { // Cut off the last slash and everything beyond int index = indexOfLastPathSeparator(lookupPath); @@ -391,8 +387,8 @@ * codefilename/code is relative. * @param filename Absolute or relative file path to resolve. * @return The canonical codeFile/code of codefilename/code. - * @todo Decide whether this is worth keeping? */ + // KILL? Decide whether this is worth keeping? public static File resolveFile(File baseFile, String filename) { String filenm = filename; if ('/' != File.separatorChar) { @@ -460,7 +456,7 @@ * @param path The path to be internalized. * @return The internalized path. */ -// KILL: Inline into the one place this is used +// KILL: Inline into the one place this is used? private static String internalize(String path) { return path.replace('\\', INTERNAL_SEPARATOR_CHAR); } @@ -471,7 +467,7 @@ * @param path The path to be externalized. * @return The externalized path. */ -// KILL: Nothing uses this +// KILL: Nothing uses this. It exists as symmetry of internalize and to promote its use private static String externalize(String path) { if (INTERNAL_SEPARATOR_CHAR != File.separatorChar) { path = path.replace(INTERNAL_SEPARATOR_CHAR, File.separatorChar); - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
scolebourne2004/10/25 16:27:41 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: Remove deprecated method for first release Revision ChangesPath 1.14 +2 -28 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.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- FilenameUtils.java24 Oct 2004 18:34:23 - 1.13 +++ FilenameUtils.java25 Oct 2004 23:27:41 - 1.14 @@ -56,6 +56,7 @@ * @author Martin Cooper * @author a href=mailto:[EMAIL PROTECTED]Jeremias Maerki/a * @version $Id$ + * @since Commons IO 1.1 */ public class FilenameUtils { @@ -462,33 +463,6 @@ path = path.replace(INTERNAL_SEPARATOR_CHAR, File.separatorChar); } return path; -} - -// DEPRECATED. Though no replacement exists. - -/** - * Returns the filename portion of a file specification string. - * Matches the equally named unix command. - * @param filename filename to inspect - * @param suffix additional remaining portion of name that if matches will - * be removed - * @return The filename string without the suffix. - * @deprecated This method will be deleted. - */ -public static String basename(String filename, String suffix) { -int i = filename.lastIndexOf(File.separator) + 1; -int lastDot = -((suffix != null) (suffix.length() 0)) -? filename.lastIndexOf(suffix) -: -1; - -if (lastDot = 0) { -return filename.substring(i, lastDot); -} else if (i 0) { -return filename.substring(i); -} else { -return filename; // else returns all (no path and no extension) -} } } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
I was looking at that method yesterday and wondering why it was deprecated. Anyone know? -- Martin Cooper On 25 Oct 2004 23:27:42 -, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: scolebourne2004/10/25 16:27:41 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: Remove deprecated method for first release Revision ChangesPath 1.14 +2 -28 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.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- FilenameUtils.java24 Oct 2004 18:34:23 - 1.13 +++ FilenameUtils.java25 Oct 2004 23:27:41 - 1.14 @@ -56,6 +56,7 @@ * @author Martin Cooper * @author a href=mailto:[EMAIL PROTECTED]Jeremias Maerki/a * @version $Id$ + * @since Commons IO 1.1 */ public class FilenameUtils { @@ -462,33 +463,6 @@ path = path.replace(INTERNAL_SEPARATOR_CHAR, File.separatorChar); } return path; -} - -// DEPRECATED. Though no replacement exists. - -/** - * Returns the filename portion of a file specification string. - * Matches the equally named unix command. - * @param filename filename to inspect - * @param suffix additional remaining portion of name that if matches will - * be removed - * @return The filename string without the suffix. - * @deprecated This method will be deleted. - */ -public static String basename(String filename, String suffix) { -int i = filename.lastIndexOf(File.separator) + 1; -int lastDot = -((suffix != null) (suffix.length() 0)) -? filename.lastIndexOf(suffix) -: -1; - -if (lastDot = 0) { -return filename.substring(i, lastDot); -} else if (i 0) { -return filename.substring(i); -} else { -return filename; // else returns all (no path and no extension) -} } } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
I reckoned removePath() was the same, as the comment referred to basepath. Stephen - Original Message - From: Martin Cooper [EMAIL PROTECTED] I was looking at that method yesterday and wondering why it was deprecated. Anyone know? -- Martin Cooper On 25 Oct 2004 23:27:42 -, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: scolebourne2004/10/25 16:27:41 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: Remove deprecated method for first release Revision ChangesPath 1.14 +2 -28 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.ja va,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- FilenameUtils.java24 Oct 2004 18:34:23 - 1.13 +++ FilenameUtils.java25 Oct 2004 23:27:41 - 1.14 @@ -56,6 +56,7 @@ * @author Martin Cooper * @author a href=mailto:[EMAIL PROTECTED]Jeremias Maerki/a * @version $Id$ + * @since Commons IO 1.1 */ public class FilenameUtils { @@ -462,33 +463,6 @@ path = path.replace(INTERNAL_SEPARATOR_CHAR, File.separatorChar); } return path; -} - -// DEPRECATED. Though no replacement exists. - -/** - * Returns the filename portion of a file specification string. - * Matches the equally named unix command. - * @param filename filename to inspect - * @param suffix additional remaining portion of name that if matches will - * be removed - * @return The filename string without the suffix. - * @deprecated This method will be deleted. - */ -public static String basename(String filename, String suffix) { -int i = filename.lastIndexOf(File.separator) + 1; -int lastDot = -((suffix != null) (suffix.length() 0)) -? filename.lastIndexOf(suffix) -: -1; - -if (lastDot = 0) { -return filename.substring(i, lastDot); -} else if (i 0) { -return filename.substring(i); -} else { -return filename; // else returns all (no path and no extension) -} } } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
bayard 2004/06/12 22:17:11 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: removed deprecated methods that are not intended to ever be released Revision ChangesPath 1.11 +2 -141 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.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- FilenameUtils.java13 Jun 2004 05:13:57 - 1.10 +++ FilenameUtils.java13 Jun 2004 05:17:11 - 1.11 @@ -414,22 +414,7 @@ } - -// -// Deprecated methods -// - -/** - * Returns the filename portion of a file specification string. - * Matches the equally named unix command. - * @param filename filename to inspect - * @return The filename string without extension. - * @deprecated This method will be deleted before a 1.0 release - * TODO DELETE before 1.0 - */ -public static String basename(String filename) { -return basename(filename, extension(filename)); -} +// DEPRECATED. Though no replacement exists. /** * Returns the filename portion of a file specification string. @@ -454,130 +439,6 @@ } else { return filename; // else returns all (no path and no extension) } -} - -/** - * Delete a file. If file is directory delete it and all sub-directories. - * @param file file or directory to delete. - * @throws IOException in case deletion is unsuccessful - * @deprecated Use [EMAIL PROTECTED] FileUtils#forceDelete(File)} - */ -public static void forceDelete( String file) throws IOException { -FileUtils.forceDelete(new File(file)); -} - - - -/** - * Clean a directory without deleting it. - * @param directory directory to clean - * @throws IOException in case cleaning is unsuccessful - * @deprecated Use [EMAIL PROTECTED] FileUtils#cleanDirectory(File)} - */ -public static void cleanDirectory( String directory) -throws IOException { -FileUtils.cleanDirectory(new File(directory)); -} - -/** - * Recursively count size of a directory (sum of the length of all files). - * - * @param directory directory to inspect - * @return size of directory in bytes. - * @deprecated Use [EMAIL PROTECTED] FileUtils#sizeOfDirectory(File)} - */ -public static long sizeOfDirectory( String directory) { -return FileUtils.sizeOfDirectory(new File(directory)); -} - -/** - * Copy file from source to destination. If codedestinationDirectory/code does not exist, it - * (and any parent directories) will be created. If a file codesource/code in - * codedestinationDirectory/code exists, it will be overwritten. - * - * @param source An existing codeFile/code to copy. - * @param destinationDirectory A directory to copy codesource/code into. - * - * @throws FileNotFoundException if codesource/code isn't a normal file. - * @throws IllegalArgumentException if codedestinationDirectory/code isn't a directory. - * @throws IOException if codesource/code does not exist, the file in - * codedestinationDirectory/code cannot be written to, or an IO error occurs during copying. - * - * @deprecated Use [EMAIL PROTECTED] FileUtils#copyFileToDirectory(File, File)} - */ -public static void copyFileToDirectory( -String source, -String destinationDirectory) -throws IOException, FileNotFoundException { -FileUtils.copyFileToDirectory(new File(source), new File(destinationDirectory)); -} - -/** - * Recursively delete a directory. - * @param directory directory to delete - * @throws IOException in case deletion is unsuccessful - * @deprecated Use [EMAIL PROTECTED] FileUtils#deleteDirectory(File)} - */ -public static void deleteDirectory( String directory) -throws IOException { -FileUtils.deleteDirectory(new File(directory)); -} - -/** - * Returns the directory path portion of a file specification string. - * Matches the equally named unix command. - * @param filename filename to inspect - * @return The directory portion excluding the ending file separator. - * @deprecated Use [EMAIL PROTECTED] FileUtils#getPath(File)} - * TODO DELETE before 1.0 - */ -public static String dirname(String filename) { -
cvs commit: jakarta-commons/io/src/java/org/apache/commons/io FilenameUtils.java
jeremias2004/03/12 13:58:59 Modified:io/src/java/org/apache/commons/io FilenameUtils.java Log: Bugzilla #27612 Fix for catPath not handling Windows-style path separators. Submitted by: Maarten Coene Maarten.Coene.at.qmedit.com Revision ChangesPath 1.8 +33 -10 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.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- FilenameUtils.java23 Feb 2004 04:35:59 - 1.7 +++ FilenameUtils.java12 Mar 2004 21:58:59 - 1.8 @@ -263,38 +263,61 @@ } /** - * Will concatenate 2 paths. Paths with code../code will be - * properly handled. - * pEg.,br / + * Will concatenate 2 paths. Paths with code../code will be + * properly handled. The path separator between the 2 paths is the + * system default path separator. + * + * pEg. on UNIX,br / * code/a/b/c/code + coded/code = code/a/b/d/codebr / * code/a/b/c/code + code../d/code = code/a/d/codebr / * /p * + * pEg. on Microsoft Windows,br / + * codeC:\a\b\c/code + coded/code = codeC:\a\b\d/codebr / + * codeC:\a\b\c/code + code..\d/code = codeC:\a\d/codebr / + * code/a/b/c/code + coded/code = code/a/b\d/codebr / + * /p + * * Thieved from Tomcat sources... * + * @param lookupPath the base path to attach to + * @param path path the second path to attach to the first * @return The concatenated paths, or null if error occurs */ public static String catPath( String lookupPath, String path) { // Cut off the last slash and everything beyond -int index = lookupPath.lastIndexOf(/); +int index = indexOfLastPathSeparator(lookupPath); String lookup = lookupPath.substring(0, index); String pth = path; // Deal with .. by chopping dirs off the lookup path -while (pth.startsWith(../)) { +while (pth.startsWith(../) || pth.startsWith(..\\)) { if (lookup.length() 0) { -index = lookup.lastIndexOf(/); +index = indexOfLastPathSeparator(lookup); lookup = lookup.substring(0, index); } else { // More ..'s than dirs, return null return null; } -index = pth.indexOf(../) + 3; -pth = pth.substring(index); +pth = pth.substring(3); } -return new StringBuffer(lookup).append(/).append(pth).toString(); +return new StringBuffer(lookup).append(File.separator).append(pth).toString(); +} + +/** + * Return the index of the last 'path separator' character. The 'path separator' + * character is '/' for UNIX systems and '\' for Microsoft Windows systems. + * + * @param path The path to find the last path separator in + * @return The index of the last 'path separator' character, or -1 if there + * is no such character. + */ +public static int indexOfLastPathSeparator(String path) { +int lastUnixPos = path.lastIndexOf('/'); +int lastWindowsPos = path.lastIndexOf('\\'); +return Math.max(lastUnixPos, lastWindowsPos); } /** - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]