平时工作中,会用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()方法传递退出值
相关推荐
用JAVA编写的绘图程序,使用JAVA 2D API 提供源代码下载 JDK版本 1.4.x 功能简介: 支持存储,格式为XML,并支持颜色信息的存取,有导出为图片功能 支持多个组件选择:CTRL选择(或取消)和拉框...
编写基于命令行形式的个人信息管理(PIMCmd)程序,要求如下:This assignment involves the creation of simple Personal Information Management (个人信息管理 ) system that can deal with 4 kinds of items: ...
使用Java编写的一个小日历程序 希望对大家有帮助 能顺利通过运行
这是一个简易记事本,有文档有代码,适合作为期末考核。
用java 编写的applet聊天程序,通过网页加载,实现远程登录聊天。
Cal(或SNAP上的fCal)是一个命令行实用程序,它将输出所需月份/年份的日历。 它简单,准确,并具有一些有用的功能。 默认情况下,Cal将显示当前年份。 您可以提供一个月和一年,一个月或仅一年。 您还可以使用-n...
自述生成器描述基于节点的CLI应用程序,它接受用户输入并使用该信息创建readme.md文件。目录安装我当前要求是: 询问者用法终端应用: 根文件夹中的node index.js来启动程序。 按照屏幕上的提示输入有关您的项目的...
普通的人不需要任何的培训即可熟练的掌握并使用。在本系统中设置有帐号和密码,用户必须要先登陆才能进入系统使用,这在很大程度上保证了信息的安全。 其次,从用户来讲,减轻了教师繁重的统计分析工作,把老师们从繁忙...
PIM_库存 设置 安装git 安装python 3.9.1 安装PostgreSQL 13.1 打开pgadmin4并创建一个数据库。 ...克隆此仓库。 在命令行中,导航到克隆的存储库中并运行: pip install -r requirements.txt
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...
(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足...
(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足...
基于java的职工管理系统,包括eclipse和idea两个版本,详情https://blog.csdn.net/qq_42733641/article/details/106525776
掷骰子这是一个简单的 Java 应用程序,它在命令行中运行,可为任意数量的一种类型的骰子执行简单的骰子滚动计算。 该程序旨在在从 JVM 返回之前每卷运行一次。 当前使用 Java 1.8 JDK 构建、运行和测试建造此应用...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
1.编写程序,检查一个字符串是否是合法的密码,密码规则如下: ...5、采用客户机/服务器模式,基于TCP协议编写程序,实现服务器端向客户端发送信息“Hello,world!”,客户端将服务器端发来的信息显示在标准输出上。
Picocli是用Java编写的现代库和框架,同时包含注释API和编程API。 它具有, 和嵌套子命令的使用帮助。 在单个文件中,因此您可以将其包括在源代码形式中。 这使用户可以运行基于picocli的应用程序,而无需将picocli...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...