Skip to content

Commit 68f11e1

Browse files
author
Stephen Colebourne
committed
Add separatorsToXxx methods to FilenameUtils
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/io/trunk@140632 13f79535-47bb-0310-9956-ffa450edef68
1 parent 07f1929 commit 68f11e1

2 files changed

Lines changed: 103 additions & 2 deletions

File tree

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

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@
5555
* @author Matthew Hawthorne
5656
* @author Martin Cooper
5757
* @author <a href="mailto:jeremias@apache.org">Jeremias Maerki</a>
58-
* @version $Id: FilenameUtils.java,v 1.18 2004/10/29 21:38:49 bayard Exp $
58+
* @author Stephen Colebourne
59+
* @version $Id: FilenameUtils.java,v 1.19 2004/10/30 22:16:23 scolebourne Exp $
5960
* @since Commons IO 1.1
6061
*/
6162
public class FilenameUtils {
@@ -65,6 +66,21 @@ public class FilenameUtils {
6566
*/
6667
private static final char INTERNAL_SEPARATOR_CHAR = '/';
6768

69+
/**
70+
* The Unix separator character.
71+
*/
72+
private static final char UNIX_SEPARATOR = '/';
73+
74+
/**
75+
* The Windows separator character.
76+
*/
77+
private static final char WINDOWS_SEPARATOR = '\\';
78+
79+
/**
80+
* The system separator character.
81+
*/
82+
private static final char SYSTEM_SEPARATOR = File.separatorChar;
83+
6884
/**
6985
* Standard separator string used when internalizing paths.
7086
*/
@@ -475,4 +491,52 @@ private static String externalize(String path) {
475491
return path;
476492
}
477493

494+
//-----------------------------------------------------------------------
495+
/**
496+
* Convert all separators to the Unix separator of forward slash.
497+
*
498+
* @param path the path to be changed, null ignored
499+
* @return the updated path
500+
*/
501+
public static String separatorsToUnix(String path) {
502+
if (path == null || path.indexOf(WINDOWS_SEPARATOR) == -1) {
503+
return path;
504+
}
505+
return path.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
506+
}
507+
508+
/**
509+
* Convert all separators to the Windows separator of backslash.
510+
*
511+
* @param path the path to be changed, null ignored
512+
* @return the updated path
513+
*/
514+
public static String separatorsToWindows(String path) {
515+
if (path == null || path.indexOf(UNIX_SEPARATOR) == -1) {
516+
return path;
517+
}
518+
return path.replace(UNIX_SEPARATOR, WINDOWS_SEPARATOR);
519+
}
520+
521+
/**
522+
* Convert all separators to the system separator.
523+
*
524+
* @param path the path to be changed, null ignored
525+
* @return the updated path
526+
*/
527+
public static String separatorsToSystem(String path) {
528+
if (path == null) {
529+
return null;
530+
}
531+
if (SYSTEM_SEPARATOR == UNIX_SEPARATOR) {
532+
return separatorsToUnix(path);
533+
}
534+
if (SYSTEM_SEPARATOR == WINDOWS_SEPARATOR) {
535+
return separatorsToWindows(path);
536+
}
537+
path = path.replace(UNIX_SEPARATOR, SYSTEM_SEPARATOR);
538+
path = path.replace(WINDOWS_SEPARATOR, SYSTEM_SEPARATOR);
539+
return path;
540+
}
541+
478542
}

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

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
* @author Peter Donald
3131
* @author Matthew Hawthorne
3232
* @author Martin Cooper
33-
* @version $Id: FilenameUtilsTestCase.java,v 1.12 2004/10/24 18:44:51 martinc Exp $
33+
* @version $Id: FilenameUtilsTestCase.java,v 1.13 2004/10/30 22:16:23 scolebourne Exp $
3434
* @see FilenameUtils
3535
*/
3636
public class FilenameUtilsTestCase extends FileBasedTestCase {
@@ -274,4 +274,41 @@ public void testRemoveExtensionWithPaths() {
274274
}
275275
}
276276

277+
//-----------------------------------------------------------------------
278+
public void testSeparatorsToUnix() {
279+
assertEquals(null, FilenameUtils.separatorsToUnix(null));
280+
assertEquals("/a/b/c", FilenameUtils.separatorsToUnix("/a/b/c"));
281+
assertEquals("/a/b/c.txt", FilenameUtils.separatorsToUnix("/a/b/c.txt"));
282+
assertEquals("/a/b/c", FilenameUtils.separatorsToUnix("/a/b\\c"));
283+
assertEquals("/a/b/c", FilenameUtils.separatorsToUnix("\\a\\b\\c"));
284+
assertEquals("D:/a/b/c", FilenameUtils.separatorsToUnix("D:\\a\\b\\c"));
285+
}
286+
287+
public void testSeparatorsToWindows() {
288+
assertEquals(null, FilenameUtils.separatorsToWindows(null));
289+
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToWindows("\\a\\b\\c"));
290+
assertEquals("\\a\\b\\c.txt", FilenameUtils.separatorsToWindows("\\a\\b\\c.txt"));
291+
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToWindows("\\a\\b/c"));
292+
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToWindows("/a/b/c"));
293+
assertEquals("D:\\a\\b\\c", FilenameUtils.separatorsToWindows("D:/a/b/c"));
294+
}
295+
296+
public void testSeparatorsToSystem() {
297+
if (File.separatorChar == '/') {
298+
assertEquals(null, FilenameUtils.separatorsToSystem(null));
299+
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("/a/b/c"));
300+
assertEquals("/a/b/c.txt", FilenameUtils.separatorsToSystem("/a/b/c.txt"));
301+
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("/a/b\\c"));
302+
assertEquals("/a/b/c", FilenameUtils.separatorsToSystem("\\a\\b\\c"));
303+
assertEquals("D:/a/b/c", FilenameUtils.separatorsToSystem("D:\\a\\b\\c"));
304+
} else {
305+
assertEquals(null, FilenameUtils.separatorsToSystem(null));
306+
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToSystem("\\a\\b\\c"));
307+
assertEquals("\\a\\b\\c.txt", FilenameUtils.separatorsToSystem("\\a\\b\\c.txt"));
308+
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToSystem("\\a\\b/c"));
309+
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToSystem("/a/b/c"));
310+
assertEquals("D:\\a\\b\\c", FilenameUtils.separatorsToSystem("D:/a/b/c"));
311+
}
312+
}
313+
277314
}

0 commit comments

Comments
 (0)