【问题标题】:How to pass args to main() in command line in Java? [closed]如何在 Java 的命令行中将 args 传递给 main()? [关闭]
【发布时间】:2021-07-30 05:01:51
【问题描述】:

我有一个主函数,我想调用 getKey() 方法并通过命令行传递 4 个参数。如何修改代码以传递参数?您能提供一些建议吗?

命令行如下所示:

java -Dlog4j.configuration=logging.properties -classpath ${class_path} --year="2021" --month="2" --day="2" --customerId=1234567

public static void main(String[] args) {
        
    List<String> keys = getKey(year, month, day, customerId);
    
    for (String key : keys) {
       ....
    }
}


【问题讨论】:

  • 我建议重新阅读有关该主题的教程,例如this one from Oracle.
  • 如果有命令行参数,则传入args[]数组。
  • 每个传递给命令行的参数都作为一个单独的项目出现在 String[] args 列表中。你只需要解析它们。手动或使用某些库来完成。如果您要手动执行此操作,您可以先将它们用“=”分隔,然后它们将第一部分解释为名称(例如年份),将第二部分解释为值(例如 2021)。

标签: java command-line parameter-passing command-line-arguments args


【解决方案1】:

如何在 Java 的命令行中将 args 传递给 main()?

首先,你的命令行不正确。

$ java -Dlog4j.configuration=logging.properties -classpath ${class_path} \
       --year="2021" --month="2" --day="2" --customerId=1234567

应该是

$ java -Dlog4j.configuration=logging.properties -classpath ${class_path} \
       ${class_name} --year="2021" --month="2" --day="2" --customerId=1234567

其中${class_name} 是包含您的入口点方法的类的全名;例如com.acme.myapp.Main 什么的。详情请见https://stackoverflow.com/a/18093929/139985

一旦您更正了上述内容,args 将在 args 参数中传递为等效于:

new String[]{"--year=2021", "--month=2", "--day=2", "--customerId=1234567"}

请注意,shell 将删除原始引号。 (如果你想阻止它,那么它们需要在命令行上被引用或转义。它发生在之前Java甚至看到了参数。)

现在你的问题是把这些字符串变成你的程序可以理解的东西。有两种方法:

  • 在自定义Java代码中实现参数解析;例如使用String.splitInteger.parseInt等。

  • 查找和使用 Java 命令行解析器库。在 Google 上搜索 java command line parser 会找到很多候选人。

如果您想遵守现有的一组约定(例如 https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html),请寻找处理此问题的库。

(请注意,标准 Java SE 库不包含命令行参数解析功能。我猜原因是操作系统命令行参数约定非常多样化,可用可移植解决方案是不可行的。 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 2011-10-14
    • 1970-01-01
    • 2011-04-26
    • 2021-08-30
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多