介绍
从命令行中使用参数运行应用程序是很常见的。特别是在服务器端。通常情况下,我们不希望应用程序在每次运行时都做同样的事情:我们希望以某种方式配置其行为。
在这个简短的教程中,我们将探讨如何在Java中处理命令行参数。
在Java中获取命令行参数
由于main方法是Java应用程序的入口点,JVM通过其参数传递命令行参数。
传统的方法是使用一个String数组:
public static void main(String[] args) {
// handle arguments
}
然而,Java 5引入了varargs,它是披着羊皮的数组。因此,我们可以用一个String vararg来定义我们的main:
public static void main(String... args) {
// handle arguments
}
它们是相同的,因此选择它们完全取决于个人的品味和偏好。
主方法的方法参数包含命令行参数,其顺序与我们在执行时传递的参数相同。如果我们想访问我们得到了多少参数,我们只需要检查数组的长度。
例如,我们可以在标准输出上打印参数的数量和它们的值:
public static void main(String[] args) {
System.out.println("Argument count: " + args.length);
for (int i = 0; i < args.length; i++) {
System.out.println("Argument " + i + ": " + args[i]);
}
}
注意,在某些语言中,第一个参数将是应用程序的名称。另一方面,在Java中,这个数组只包含参数。
如何传递命令行参数
现在我们有了一个可以处理命令行参数的应用程序,我们急于尝试它。让我们看看我们有哪些选项。
命令行
最明显的方式是命令行。让我们假设我们已经编译了com.baeldung.commandlinearguments.CliExample类,其中有我们的主方法。
然后我们可以用下面的命令来运行它:
java com.baeldung.commandlinearguments.CliExample
它产生的输出如下:
Argument count: 0
现在,我们可以在类名后面传递参数:
java com.baeldung.commandlinearguments.CliExample Hello World!
而输出结果是:
Argument count: 2
Argument 0: Hello
Argument 1: World!
通常,我们把我们的应用程序作为一个jar文件发布,而不是作为一堆.class文件。比方说,我们把它打包在cli-example.jar中,并把com.baeldung.commandlinearguments.CliExample作为主类。
现在我们可以用下面的方法运行它,不需要参数。
java -jar cli-example.jar
或者带参数:
java -jar cli-example.jar Hello World!
Argument count: 2
Argument 0: Hello
Argument 1: World!
注意,Java将把我们在类名或jar文件名之后传递的每一个参数都视为我们应用程序的参数。因此,我们在这之前传递的所有参数都是JVM本身的参数。
IntelliJ
IntelliJ使用一个类似的过程来运行应用程序。它把这些选项简单地称为配置。
首先,我们需要右击main方法,然后选择运行'CliExample.main()'。
这将运行我们的程序,但它也将把它添加到运行列表中,以便进一步配置。
因此,要配置参数,我们应该选择 Run > Edit Configurations…,然后编辑程序参数文本框:
之后,我们应该点击确定并重新运行我们的应用程序,例如用工具栏上的运行按钮。
三方库
在简单的情况下,手工处理命令行参数是很直接的。然而,随着我们的要求变得越来越复杂,我们的代码也越来越复杂。因此,如果我们想创建一个有多个命令行选项的应用程序,使用第三方库会更容易。
幸运的是,有大量的这些库可以支持大多数的使用情况。两个流行的例子是Picocli和Spring Shell。
结论
让你的应用程序的行为可配置,总是一个好主意。在这篇文章中,我们看到了如何使用命令行参数来做到这一点。此外,我们还介绍了传递这些参数的各种方法。