【问题标题】:Strange java command line folder path issue奇怪的java命令行文件夹路径问题
【发布时间】:2017-03-11 13:50:16
【问题描述】:

我有一个应用程序接收路径作为命令行参数。路径可以包含空格,因此可以用引号发送。我需要验证这个路径是否正确,所以我从 'File' 类执行 '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 类说路径不存在。第二个不带引号的例子效果很好。 参数路径有一个免费的用户版本,因此可以包含引号(如果路径有带空格的文件夹)和最后一个斜杠。

【问题讨论】:

  • \" 是转义的 "。研究字符转义。
  • 你解决了这个问题吗?
  • 好像talex解决方案有效,但是最后的两个斜线有点难看。无论如何,我还没有找到更好的方法来处理这个问题。

标签: windows cmd command-line-arguments


【解决方案1】:

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

这也是奇怪的输出。当我做同样的事情时,我在最后一种情况下得到了args=c:\folder"

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 2017-09-19
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2013-06-21
    • 2019-01-20
    相关资源
    最近更新 更多