【问题标题】:Trouble passing directories into java application via command line无法通过命令行将目录传递到 java 应用程序
【发布时间】:2016-08-19 03:15:55
【问题描述】:

我正在尝试通过 cmd 行将一些目录传递给我的 java 应用程序。

这是两个目录:

\##############\估值\生产\CMRM-VC-FI\Bondzilla-Snaps\2016 年 4 月\ \#########\Home\A#######\Desktop\autorbtest.csv (我已经把目录的某些部分涂黑了)

因为第一个目录的末尾有一个空格,所以 java 将第一个目录解释为两个单独的 args。我试图在目录 (") 周围加上双引号,但 java 仍然将该空间解释为单独的 arg。

我认为这与目录开头的双反斜杠有关。

任何帮助都会很棒。谢谢

【问题讨论】:

  • 您应该显示解析输入的代码
  • 很好,参数被传递到主函数中。 java 中的 main 函数接受 1 个参数,即 string[] args。 java将参数加载到数组中,我不解析输入。 java解释参数的方式只是通过空格。我认为在这里显示我的代码没有多大意义
  • 当然会有很大的相关性。我们在这里查看代码,而不是目录结构。没有任何代码,没有人会(能够)帮助你。
  • 不管我的应用程序对参数做了什么,如果 java 没有正确解析参数,那么这与我的代码完全无关。再说一遍,无缘无故地扔一堆代码无关紧要。不想把事情复杂化。另一位用户提供了一个很好用的答案。

标签: java command-line-arguments


【解决方案1】:

我猜测,根据上面的输入,当使用带空格的路径周围的引号时,以反斜杠结尾,实际上 OP 收到 一个 参数而不是两个。用空格引用路径会起作用,但如果最终路径以反斜杠结尾则不会。愿 Windows 永远因使用反斜杠作为路径分隔符而受到诅咒。

要指定路径##############\Valuations\Production\CMRM-VC-FI\Bondzilla-Snaps\April 2016\,您需要这样做

java WHAT_EVER_ARGS CLASSNAME "\##############\Valuations\Production\CMRM-VC-FI\Bondzilla-Snaps\April 2016\\" "other file"

作为检查,您可以在 main 方法中添加:

    int i = 0;
    for (String arg : args) {
        System.out.printf("[%d]: %s%n", i++, arg);
    }

您应该会看到预期参数的数量。如果不将尾部反斜杠加倍,则只会看到一个输出。

参数为:"\somePath\Has a Space\At end\" "\someother\Path\Here"时的示例

[0]: \somePath\Has a Space\At end" \someother\Path\Here

参数为:"\somePath\Has a Space\At end\\" "\someother\Path\Here"时的示例

[0]:\somePath\有一个空格\结尾\
[1]: \someother\Path\Here

【讨论】:

  • 也可以这样做 \##############\Valuations\Production\CMRM-VC-FI\Bondzilla-Snaps\"April 2016"\跨度>
  • @karina,确实可以,但是如果有多个段中带有空格,它会变得更加复杂,因为它可能需要引用多个段。我个人认为根本不需要尾部斜杠,但这是另一回事。
  • 我也同意不需要斜杠,但我想最大的担忧是这在技术上是用户输入......它可以是任何东西。
猜你喜欢
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
相关资源
最近更新 更多