在 Windows 上,以 / 开头的文件不被视为绝对文件

On Windows, file starting with / is not considered absolute

这让我感到惊讶,但显然,Windows 上以斜杠开头的路径不被视为绝对路径。您需要指定 c:。但可以肯定的是,/foofoo

之间是有区别的
System.out.println(new File(new File("/folder"), "abc"));
System.out.println(new File(new File("/folder"), "abc").isAbsolute());

\folder\abc
false

这是正确的行为吗?

我希望能够识别一个相对路径,例如foo,这样我就可以在前面添加一个默认目录。但我认为 /foo 是绝对路径,不会在默认

前面加上

您可以使用 Boolean isPathAbsolute = "/foo".startsWith("/") 检查文件路径的开头是否以“/”开头,并使用此变量来决定是否添加默认值!

您不需要通过字符串比较来检查“isAbsolute”,只需使用 Path 并使用 defaultDir.resolve(path)

解析

考虑:

var rel = Path.of("relative");
var abs = Path.of("/absolute");

for (Path dir : List.of(Path.of("."), Path.of("abc"),Path.of("/abc"))) {
    System.out.println("dir="+dir);
    System.out.println("dir.resolve("+abs+")="+dir.resolve(abs));
    System.out.println("dir.resolve("+rel+")="+dir.resolve(rel));
}

这处理使用另一个路径从默认目录路径解析,该路径可以是相对或绝对的(在某种意义上它以路径分隔符开头)在 Windows 或 Linux.

来自 Linux 的示例 运行(Windows 是相同的答案,但带有 Windows 路径分隔符)。

dir=.
dir.resolve(/absolute)=/absolute
dir.resolve(relative)=./relative
dir=abc
dir.resolve(/absolute)=/absolute
dir.resolve(relative)=abc/relative
dir=/abc
dir.resolve(/absolute)=/absolute
dir.resolve(relative)=/abc/relative