奇怪的 java 命令行文件夹路径问题

Strange java command line folder path issue

我有一个应用程序接收路径作为命令行参数。路径可以包含空格,因此可以用引号发送。我需要验证这个路径是否正确,所以我从 'File' class:

执行 'exists' 方法
public static void main (String... args) {
  System.out.println("arg=" + args[0]);
  File f = new File(args[0]);
  System.out.println("exists=" + f.exists());
}

当我运行 带有以下参数的应用程序时,我得到了这个结果(假设"c:\folder" 存在)。注意最后的斜杠和引号:

> java Test c:\folder
args=c:\folder
exists=true

> java Test c:\folder\
args=c:\folder\
exists=true

> java Test "c:\folder"
args=c:\folder
exists=true

> java Test "c:\folder\"
args=c:\folder
exists=false

我不明白最后一个例子是怎么回事。首先在 args 结果中不打印最后的斜线,然后 File class 说路径不存在。第二个没有引号的例子效果很好。 参数路径有免费用户版本,因此可以包含引号(如果路径包含带空格的文件夹)和最后的斜杠。

这不是 java 的问题,而是您 shell 的问题。 \ 如果在 Windows 中的 " 之前使用,则用作转义符。要解决这个问题,您可以将参数写为 "c:\folder\"

也是奇怪的输出。当我做同样的事情时,我在最后一个案例中得到了 args=c:\folder"