使用Java编写基于命令行的程序

平时工作中,会用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

 附件代码说明

  1. 使用Apache Ant编译
  2. ant默认指令为: ant jar

真实的使用案例:

mas-message

https://github.com/lvjian700/mas-message

提供给C++客户端使用,调用北京电视的内部短信接口。

可供学习的内容:

  • Apache Common Cli 包的使用
  • C 通过命令行调用 Jar包
  • Java中使用System.exit()方法传递退出值

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、 创建类实现基本对象和他们关系的管理,包括学生、教学班、课程、成绩、教师等。使用集合框架存储所有对象。学生至少包含学号、姓名、性别等信息。教学班至少包含教师、课程名字、总人数、教学班号、开课学期等信息。课程至少包含课程编号、课程名字等信息。教师至少包含教师编号、姓名等信息。 2、随机生成学生,数量不少于100。一个教学班有一个教师上一门课程,教学班的学生数量不少于20。课程数量不少于3门。教师数量不少于6个。一门课至少有两个老师上课。每个学生选择至少选择3门课程。一个学生在一个教学班上一门课,考试后取得一个成绩。一门课的成绩构成有4部分构成,包括平时成绩、期中考试、实验成绩和期末考试成绩,然后计算出总成绩成绩随机生成,均为整数。 3、分阶段模拟教学过程。例如执行一个命令,可以生成一个教学班的所有学生的平时成绩。第一步,生成初始化数据,包括教师,学生、课程,教学班等;第二步,学生选课,随机进行,为每门课程的教学班安排学生。第三步,获得平时成绩,获得期中成绩,获得实验成绩,获得期末成绩,最后计算总成绩。 4、能够显示一个教学班级的学生,可以根据学号排序,可以根据成绩排序。可以通过名字查询成绩,可以按照各科成绩和总成绩进行排名显示,可以统计各课程学生成绩的分数段分布。 5、可以实现自己的扩展功能。注意类和类之间的关系。充分利用继承,多态等特性,使用上抽象类,接口,泛型,内部类等设计元素

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值