在 Windows 上,以 / 开头的文件不被视为绝对文件
On Windows, file starting with / is not considered absolute
这让我感到惊讶,但显然,Windows 上以斜杠开头的路径不被视为绝对路径。您需要指定 c:。但可以肯定的是,/foo
和 foo
之间是有区别的
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
这让我感到惊讶,但显然,Windows 上以斜杠开头的路径不被视为绝对路径。您需要指定 c:。但可以肯定的是,/foo
和 foo
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