Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resolve a path name with .. parent directory specifiers ("dot dot") without resolving symlinks

Given a path like /a/./b/c/../d, I would like to remove all the "current directory" indicators (i.e., period) and "parent directory" indicators (i.e., ..), giving a/b/d.

I could use File.getCanonicalPath(), but that also resolves symlinks, which I don't want.

Any simple way? That is, simpler than writing a tokenizer and handling it all myself.

Bonus points if you can tell me what the right name for '.' and '..' are in this context.

like image 207
BeeOnRope Avatar asked Nov 08 '12 01:11

BeeOnRope


3 Answers

Guava also has this as Files.simplifyPath(String). Your best bet, though, (if you can use JDK7) is to represent your path as a Path and use Path.normalize() to get the normalized version.

like image 64
ColinD Avatar answered Nov 19 '22 14:11

ColinD


You can use FilenameUtils.normalize() in the Apache Commons IO library - see javadoc here.

"Dot" (.) is the current directory and "dot dot" (..) is the parent directory - read up on unix directories.

like image 4
doublesharp Avatar answered Nov 19 '22 15:11

doublesharp


Have also a look at this question (Java 7 or newer): Java: how to normalize paths with nio Path?

The solution is great, but it is not portable (it will not work on Windows machines).

like image 2
Jmini Avatar answered Nov 19 '22 15:11

Jmini