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.
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.
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.
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With