使用cmd运行现有的java程序

时间:2015-01-10 16:01:38

标签: java cmd

我有一个正在运行的java程序,它将json文件转换为另一种文件格式。一切都很好。 为了实现,我决定使用MVC模式。

现在我想实现整个转换例程,以便我可以使用命令提示符,但我从未使用过它,并且根本不知道如何实现这一点。

我的想法是:

  1. 打开cmd并导航到main.java文件。
  2. 打印出全部可能性(用户应该能够输入源文件和目标目录的目录,用户应该能够选择目标格式)。
  3. 如果用户输入了所有内容,则应按ENTER键启动转换例程。
  4. 帮助会非常好。目前我只知道如何编译(javac helloWorld.java)并打印" Hello World!"通过使用java helloWorld ...

    来编写程序

2 个答案:

答案 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]中是类名后面的第一个参数。