【问题标题】:Java: Making an Optional Command Line ArgumentJava:制作一个可选的命令行参数
【发布时间】:2017-08-02 21:23:58
【问题描述】:

我正在开发一个程序,该程序应该采用一个必需的命令行参数和一个可选的命令行参数。第一个参数是要写入数据的输出文件的名称,第二个参数是用于计算要写入输出文件的数据的数字。如果用户没有输入数字,那么它应该只使用默认值来计算数据。例如,如果用户输入命令行参数“Foo.csv 1024”,程序将使用 1024 计算数据并将其写入 Foo.csv,但如果用户仅使用命令行参数“Foo.csv”,则程序将使用默认值 2048 来计算数据并将其写入 Foo.csv。我正在使用 Intellij IDE 创建/运行这个程序。我该怎么做?任何建议/建议将不胜感激。

【问题讨论】:

  • 检查args.length(或任何你在public static void main(String[] args)中调用的参数)用一个普通的旧条件。
  • @Andy Turner 正是我想要的。非常感谢!

标签: java intellij-idea command-line-arguments optional-arguments


【解决方案1】:

您的程序似乎很简单,因此对于这种特殊情况,解决方案也很简单。你可以测试有多少参数被传递给程序检查你的主函数的参数args

public static void main(String[] args){...}

args 是一个数组,其中包含传递给程序的参数。因此,如果您的程序名为 prog,并且您使用 prog Foo.csv 1024 运行它,那么 args 将具有:

args[0] = "Foo.csv";
args[1] = "1024";

有了这个,你知道哪些参数被传递给你的程序,并且通过 args.length,你可以知道它们有多少。对于上面的示例,args.length=2 如果用户没有指明最后一个参数(“1024”),那么您将在 args 中有 args.length=1 和以下内容

args[0] = "Foo.csv";

所以你的程序应该是这样的:

public static void main(String[] args){
//The default value you want
int number = 2048
if(args.length==2){
    number = Integer.parseInt(args[1]);
}
//'number' will have the number the user specified or the default value (2048) if the user didn't specify a number
}

要为您的程序提供参数,您必须在控制台或某种终端上运行它。使用 IntelliJ(或任何其他 IDE)也可以使用参数运行程序,但您可以在 Run Settings 中指定这些参数。

如果您想要对参数进行更复杂的处理,通常您需要的是 参数解析器。这些通常是带你 argv 并帮助你阅读程序参数的库。除其他外,这些库通常支持可选参数、通过标志提供的参数、参数的类型检查、为您的命令创建自动帮助页面等。如果您的参数要求更复杂,或者您只想给出一个对您的程序进行专业的接触 :) 对于 java,我发现了这个特殊的库:http://www.martiansoftware.com/jsap/doc/

【讨论】:

  • progargs 中的说法不正确。如here 所述,Java 不包含数组中的程序名称。
  • 对。相应地编辑了答案。
猜你喜欢
  • 1970-01-01
  • 2012-10-06
  • 2017-04-04
  • 2012-10-07
  • 1970-01-01
  • 2015-07-05
  • 2012-06-13
  • 2012-03-08
相关资源
最近更新 更多