I need to get a file name from file’s absolute path (I am aware of the file.getName() method, but I cannot use it here).
EDIT: I cannot use file.getName() because I don’t need the file name only; I need the part of the file’s path as well (but again, not the entire absoulte path). I need the part of file’s path AFTER certain path provided.
Let’s say the file is located in the folder:
C:\Users\someUser
On windows machine, if I make a pattern string as follows:
String patternStr = "C:\\Users\\someUser\\(.*+)";
I get an exception: java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence for backslash.
If I use Pattern.quote(File.pathSeparator):
String patternStr = "C:" + Pattern.quote(File.separator) + "Users" + Pattern.quote(File.separator) + "someUser" + Pattern.quote(File.separator) + "(.*+)";
the resulting pattern string is: C:\Q;\EUsers\Q;\EsomeUser\Q;\E(.*+) which of course has no match with the actual fileName “C:\Users\someUser\myFile.txt”.
What am I missing here? What is the proper way to parse file name?
If you indeed want to use a regular expressions, you should use
instead.
Why? Your string literal
is compiled to
Since
\is used for escaping in regular expressions too, you’ll have to escape them “twice”.Regarding your edit:
You probably want to have a look at
URI.relativize(). Example:(Note that
/works as file-separator on Windows machines too.)Btw, I don’t know what you have as
File.separatoron your system, but if it’s set to\, thenshould yield