我有一个正在运行的java程序,它将json文件转换为另一种文件格式。一切都很好。 为了实现,我决定使用MVC模式。
现在我想实现整个转换例程,以便我可以使用命令提示符,但我从未使用过它,并且根本不知道如何实现这一点。
我的想法是:
cmd
并导航到main.java文件。帮助会非常好。目前我只知道如何编译(javac helloWorld.java
)并打印" Hello World!"通过使用java helloWorld
...
答案 0 :(得分:2)
apache commons cli项目提供了解析命令行参数和提供帮助菜单的实用程序。这使得处理提供给main方法的args变得非常简单。
您还需要提供脚本来组装类路径。您可以查看maven app assembler plugin了解此操作的方法。
答案 1 :(得分:1)
shell /命令提示符与启动的Java程序之间的交互非常类似于它在C程序中的工作方式*。 main()
方法从命令行(或从执行java运行时的任何其他父进程)接收参数作为字符串。
在Java中,您将获得一个字符串数组。你需要自己决定哪个字符串具有什么含义。
public static void main(String[] arg) { // traditional or String ... args
System.out.println("You have " + arg.length + " arguments);
if (arg.length >= 1) System.out.println("First: " + arg[0]);
}
使用参数启动Java运行时时,请务必注意,参数在类名(或JAR名称)之后开始:
java -cp . package.Main arg0 arg1 ...
java -jar package.jar arg0 arg1 ...
Java运行时还有一种在命令行上指定系统属性的机制。这是通过-D
选项完成的。
java -Dverbose=yes -jar package.jar arg0 arg1 ...
java -jar package.jar -Dverbose=yes arg1 ... //not a system property but arg[0]
重要的是,此选项在类/ jar-name之前指定,否则运行时将不会处理它,但您将看到另一个参数。
String verbose = System.getProperty("verbose", "false");
系统属性有用的原因:你可以使用它们进行可选控制,所以你不必担心识别参数(有很多库可以做到这一点但是对于小工具我觉得它是矫枉过正)。
BTW:当使用通配符(*
和?
)和空白/引用时,shell /提示和启动程序之间存在一些交互 - 这些是特定于操作系统的。
*在C中,第一个参数args[0]
是程序名,在java arg[0]
中是类名后面的第一个参数。