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

时间:2016-10-28 16:03:50

标签: windows cmd command-line-arguments

我有一个应用程序,它接收一个路径作为命令行参数。路径可以包含空格,因此可以使用引号进行处理。我需要验证此路径是否正确,因此我执行“存在”#39;来自' File'的方法类:

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

当我使用follow参数运行应用程序时,我得到了这个结果(假设" 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类说该路径不存在。没有引号的第二个例子效果很好。 参数路径有一个免费的用户版本,因此可以包含引号(如果路径包含带空格的文件夹)和最终斜杠。

1 个答案:

答案 0 :(得分:2)

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

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