diff options
Diffstat (limited to 'java/io/File.java')
-rw-r--r-- | java/io/File.java | 76 |
1 files changed, 18 insertions, 58 deletions
diff --git a/java/io/File.java b/java/io/File.java index 7dbc6109e..4f5ab4e66 100644 --- a/java/io/File.java +++ b/java/io/File.java @@ -286,7 +286,8 @@ public class File implements Serializable, Comparable<File> // example, is a valid and minimal path). if (plen > 1 && p.charAt (plen - 1) == separatorChar) { - if (! (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':')) + if (! (separatorChar == '\\' && ((plen == 3 && p.charAt(1) == ':') + || (plen == 2 && p.charAt(0) == separatorChar)))) return p.substring (0, plen - 1); } else @@ -303,7 +304,16 @@ public class File implements Serializable, Comparable<File> { dupIndex++; if (dupIndex == plen) - return newpath.toString(); + { + if ((separatorChar == '\\' + && newpath.length() == 2 + && newpath.charAt(1) == ':') + || (separatorChar != '\\' && newpath.length() == 0)) + { + newpath.append(separatorChar); + } + return newpath.toString(); + } } newpath.append(separatorChar); last = dupIndex; @@ -315,7 +325,9 @@ public class File implements Serializable, Comparable<File> int end; if (plen > 1 && p.charAt (plen - 1) == separatorChar) { - if (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':') + if (separatorChar == '\\' + && ((plen == 3 && p.charAt(1) == ':') + || (plen == 2 && p.charAt(0) == separatorChar))) end = plen; else end = plen - 1; @@ -427,45 +439,8 @@ public class File implements Serializable, Comparable<File> { if (isAbsolute()) return path; - else if (separatorChar == '\\' - && path.length() > 0 && path.charAt (0) == '\\') - { - // On Windows, even if the path starts with a '\\' it is not - // really absolute until we prefix the drive specifier from - // the current working directory to it. - return System.getProperty ("user.dir").substring (0, 2) + path; - } - else if (separatorChar == '\\' - && path.length() > 1 && path.charAt (1) == ':' - && ((path.charAt (0) >= 'a' && path.charAt (0) <= 'z') - || (path.charAt (0) >= 'A' && path.charAt (0) <= 'Z'))) - { - // On Windows, a process has a current working directory for - // each drive and a path like "G:foo\bar" would mean the - // absolute path "G:\wombat\foo\bar" if "\wombat" is the - // working directory on the G drive. - String drvDir = null; - try - { - drvDir = new File (path.substring (0, 2)).getCanonicalPath(); - } - catch (IOException e) - { - drvDir = path.substring (0, 2) + "\\"; - } - - // Note: this would return "C:\\." for the path "C:.", if "\" - // is the working folder on the C drive, but this is - // consistent with what Sun's JRE 1.4.1.01 actually returns! - if (path.length() > 2) - return drvDir + '\\' + path.substring (2, path.length()); - else - return drvDir; - } - else if (path.equals("")) - return System.getProperty ("user.dir"); else - return System.getProperty ("user.dir") + separatorChar + path; + return VMFile.getAbsolutePath(path); } /** @@ -657,15 +632,7 @@ public class File implements Serializable, Comparable<File> */ public boolean isAbsolute() { - if (separatorChar == '\\') - return path.startsWith(dupSeparator) || - (path.length() > 2 && - ((path.charAt(0) >= 'a' && path.charAt(0) <= 'z') || - (path.charAt(0) >= 'A' && path.charAt(0) <= 'Z')) && - path.charAt(1) == ':' && - path.charAt(2) == '\\'); - else - return path.startsWith(separator); + return VMFile.isAbsolute(path); } /** @@ -998,14 +965,7 @@ public class File implements Serializable, Comparable<File> */ public URL toURL() throws MalformedURLException { - // On Win32, Sun's JDK returns URLs of the form "file:/c:/foo/bar.txt", - // while on UNIX, it returns URLs of the form "file:/foo/bar.txt". - if (separatorChar == '\\') - return new URL ("file:/" + getAbsolutePath().replace ('\\', '/') - + (isDirectory() ? "/" : "")); - else - return new URL ("file:" + getAbsolutePath() - + (isDirectory() ? "/" : "")); + return VMFile.toURL(this); } |