使用Java编写基于命令行的程序
程序员文章站
2022-06-08 15:18:53
...
平时工作中,会用Java编写基于命令行的小工具。本片将介绍如何使用Java编写基于命令行的程序。
命令行程序需要包含的内容
- 命令行参数解析
- 程序以及参数说明
- 程序功能的实现(这个根据自己情况而定)
Java中如何处理命令行参数
最直接的处理命令行的方法:
public class Cli { public static void main (String [] args) { for(String arg : args ) { System.out.println(arg); } } }
运行:
m-lv:cli lvjian$ javac Cli.java m-lv:cli lvjian$ java Cli m-lv:cli lvjian$ java Cli -file filename -file filename
复杂一点的命令处理
下面这段代码摘自我的Java2ObjC Tools工具:
Ant中的运行脚本
<target name="rk2" depends="compile"> <java fork="true" classname="tools.restkit.RKTools" classpathref="classpath"> <classpath path="${classes.dir}"/> <arg value="-o"/> <arg value="/Users/lvjian/macspace/changji/changji/src/models"/> <arg value="-v"/> <arg value="2"/> <arg value="-excludes" /> <arg value="TaskCounts,TaskCycle,TaskLog,TaskRouter,FormatGroup,Project,Device,DevicePort"/> </java> </target>
程序代码段
public static void main(String[] args) throws ClassNotFoundException { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/tools/spring/restkit.xml"); RKTools tools = (RKTools)ctx.getBean("rktools"); if(args[0].equals("-o")) { String output = args[1]; log.info("output path:" + output); tools.setTargetSrc(output); } if(args[2].equals("-v")) { String version = args[3]; log.info("version:" + version); tools.setVersion(version); } if(args[4].equals("-excludes")) { String excludes = args[5]; if(excludes != null) { String[] arr = excludes.split(","); tools.setExcludes(arr); } } tools.generate(); }
如果每个参数都这么解析,那太痛苦了。况且这里用了大量代码只做了解析工作,并且还没有做提供命令行参数说明文档。一般使用 Apache Common Cli 包解决。
一个完成的例子
使用Apache Common Cli 改造之前的 Cli 代码
import org.apache.commons.cli.*; public class Cli { static Options opts = new Options(); static { // 配置两个参数 // -h --help 帮助文档 // -f --file file参数 opts.addOption("h", "help", false, "The command help"); opts.addOption("f", "file", false, "Input your file name."); } /** * 提供程序的帮助文档 */ static void printHelp(Options opts) { HelpFormatter hf = new HelpFormatter(); hf.printHelp("The Cli app. Show how to use Apache common cli.", opts); } public static void main (String [] args) throws ParseException { // 解析参数 CommandLineParser parser = new PosixParser(); CommandLine cl = parser.parse(opts, args); if(cl.hasOption("h")) { printHelp(opts); return; } String filename = cl.getOptionValue("file"); System.out.println(filename); } }
运行
m-lv:cli lvjian$ java -jar cli.jar -h usage: The Cli app. Show how to use Apache common cli. -f,--file <arg> Input your file name. -h,--help The command help m-lv:cli lvjian$ java -jar cli.jar -f fileparameter fileparameter m-lv:cli lvjian$ java -jar cli.jar -file fileparameter fileparameter
附件代码说明
- 使用Apache Ant编译
- ant默认指令为: ant jar
真实的使用案例:
mas-message
https://github.com/lvjian700/mas-message
提供给C++客户端使用,调用北京电视的内部短信接口。
可供学习的内容:
- Apache Common Cli 包的使用
- C 通过命令行调用 Jar包
- Java中使用System.exit()方法传递退出值
推荐阅读
-
使用命令行安装驱动程序的方法
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
java基础------环境变量的配置及编写第一个程序
-
使用C#编写简单的图形化的可发送附件的邮件客户端程序
-
JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
-
使用Python编写一个模仿CPU工作的程序
-
使用Python编写简单的画图板程序的示例教程
-
使用Python的Twisted框架编写非阻塞程序的代码示例
-
Java入门(一)——编写一个简单的Java程序
-
写给iOS程序员的命令行使用秘籍