The javadoc states that File.pathSeparatorChar
is:
The system-dependent path-separator character. This field is initialized to contain the first character of the value of the system property path.separator. This character is used to separate filenames in a sequence of files given as a path list. On UNIX systems, this character is
:
; on Microsoft Windows systems it is;
.
But that seems strange, because a semicolon is not a forbidden character for Windows paths (for references, those are \
/
:
*
?
"
<
>
|
, cf the rename feature of Windows Explorer).
For example, with the following code:
String test = "C:\\my;valid;path" + File.pathSeparator + "C:\\Windows";
String[] tests = test.split(File.pathSeparator);
tests
will contain C:\\my
valid
path
C:\\Windows
, which isn't what it'd expect.
So the question is: why isn't this character a colon, like on Unix? I could force my code to use a colon, but that seems to defeat the purpose of having a constant in the JDK.
Edit: Reimeus explained why it can't be a colon on Windows (it's the drive separator), but what I'm really interested in is the reason why it's not a character that can't appear in a path, such as |
.
You're confusing the path separator with the directory separator.
The path separator is what separates paths entries in the PATH
environment variable. It is ;
on Windows. For example:
PATH=C:\Windows;C:\Program Files
The directory separator separates single folder names when specifying a file or folder name. It is \
on Windows. For example:
C:\Windows\Temp\Test.txt
After our discussion in the comments I finally understood your problem :-D The question "why" can probably only be answered by Microsoft. It is - I agree with you - not a smart idea to use a separator that's allowed in folder names. Maybe this comes from the old days of 8-character names?
The real question should be how you can determine whether the ;
is part of the folder or acts as the separator. I'm going to ask that question myself, because I find this rather interesting.
The PATH separator has been a semicolon for a very long time, presumably since the very first release of MS-DOS. (I'm assuming, as per Thorsten's answer, that Java simply defered to the Windows convention, presumably because Java programmers are likely to assume that they can use pathSeparatorChar
to parse the value of PATH rather than only to parse file lists produced by Java itself.)
The most obvious options for such a separator (by analogy with English) are the period, the comma, and the semicolon. The period would conflict with the 8.3 file name format. The choice of the semicolon over the comma may well have been arbitrary.
At any rate, semicolons were not legal characters in file names at that time, so there was no reason to prefer the comma. And, of course, since nowadays both commas and semicolons are legal, we wouldn't be any better off if they had. :-)
A colon :
is used to denote a drive letter
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