`
witcheryne
  • 浏览: 1100267 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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

    博客分类:
  • J2SE
阅读更多

平时工作中,会用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()方法传递退出值

 

 

 

 

  • cli.zip (77.7 KB)
  • 下载次数: 16
分享到:
评论
1 楼 咕嘟咕嘟_HIT 2015-03-07  
请问您这部分代码是只实现了命令解析的功能吗

相关推荐

    PIM_接口_PIM_assignment_java上机实验_pimcmd_

    编写基于命令行形式的个人信息管理(PIMCmd)程序,要求如下:This assignment involves the creation of simple Personal Information Management (个人信息管理 ) system that can deal with 4 kinds of items: ...

    java编写的命令行学生信息管理程序(用treemap)

    Java编写的命令行学生信息管理程序是一个典型的使用Java语言实现的控制台应用程序,它利用了数据结构和算法来实现对学生信息的有效管理和操作。这个程序基于`Treemap`数据结构,这是一种在Java中由`java.util....

    java基于命令行的学生成绩管理系统

    综上所述,【java基于命令行的学生成绩管理系统】是一个运用了Java核心特性、控制台交互、数据管理和文件操作的项目。通过这个项目,开发者可以深化对面向对象编程、数据结构、文件操作以及基本算法的理解,同时也能...

    Java编写的一个日历程序

    使用Java编写的一个小日历程序 希望对大家有帮助 能顺利通过运行

    java期末课程设计-简易记事本

    9. **文档编写**:项目中包含的文档可能是设计文档、用户手册或开发者指南,有助于理解程序的架构和使用方法。 通过完成这样的课程设计,学生不仅可以提升Java编程技能,还能锻炼问题解决、项目管理和团队协作的...

    个人使用JAVA编写的聊天程序

    本项目是个人使用JAVA编写的聊天程序,它实现了基本的即时通讯功能,用户之间可以进行文字聊天并发送表情,具有实时性的特点。 首先,我们要了解Java聊天程序的基础架构。在Java中,通常会采用Socket编程来实现网络...

    java 聊天工具 命令行版

    在这个项目中,我们关注的是一个用Java编写的命令行聊天工具。这款工具提供了一个基本的交互平台,让两个或多个用户可以在同一台计算机上通过命令行界面进行实时通信。虽然它的功能相对简单,没有图形用户界面(GUI...

    使用 Java 开发的命令行游戏.zip

    《使用Java开发的命令行游戏》是一个非常适合初学者和有一定经验的Java开发者进行实践和学习的项目。这个项目的核心在于利用Java语言构建一个基于文本界面的冒险类游戏,旨在提升编程技能,理解面向对象编程(OOP)...

    JAVA编写的记事本程序

    【标题】:“JAVA编写的记事本程序” 在IT领域,Java是一种广泛应用的高级编程语言,以其跨平台、面向对象的特性而闻名。本项目是一个使用Java开发的记事本程序,它允许用户进行基本的文字编辑操作,如新建、打开、...

    基于Java语言实现的命令行工具-everything.zip

    本项目"基于Java语言实现的命令行工具-everything.zip"是一个利用Java编程语言编写的命令行应用程序,旨在提供一个灵活、可扩展的工具集,以增强用户在终端中的操作体验。 Java作为一种跨平台的编程语言,以其“一...

    基于命令行的JDBC基本操作示例

    总结来说,这个基于命令行的JDBC示例展示了如何在Java中与数据库进行交互,包括使用JDBC API的基础操作,以及利用Druid和C3P0数据源提升性能和管理效率。此外,通过引入Apache Commons DBUtils,我们可以编写更简洁...

    java编写的小程序

    这个"java编写的小程序"就是基于Java语言构建的,旨在进行花费计算。 【类与对象】 在Java中,程序的核心是类和对象。在这个计算花费的小程序中,可能会定义一个名为`MoneyCalculator`的类,用于封装计算逻辑。类...

    java基于socket编写的聊天室程序

    Java基于Socket编写的聊天室程序是一种典型的客户端-服务器(C/S)架构的应用,它利用了Java的网络编程能力,特别是Socket类,来实现用户之间的实时通信。在这个程序中,Server.jar是服务器端程序,它监听特定的端口...

    drawsomethings:这是 Java 上的命令行绘图程序

    在Java编程环境中,开发命令行绘图程序是一种有趣且实用的学习实践。`drawsomethings`项目就是一个很好的示例,它允许用户通过简单的命令在控制台中绘制图形。这篇文章将深入探讨这个Java命令行绘图程序的核心概念和...

    命令行中的java五子棋小游戏

    【Java五子棋小游戏】是一款基于命令行界面的娱乐项目,它通过纯文本方式呈现棋盘,让两个玩家在控制台上交替下棋。这个小游戏展示了Java编程语言在实现交互式应用方面的灵活性和功能。 首先,我们要理解Java的基础...

    用Java编写程序,求一元二次方程ax²+bx+c=0的根(系数在程序中给定),并输出。

    接下来,我们用Java编写一个简单的程序来实现这个功能: ```java import java.util.Scanner; import java.lang.Math; public class QuadraticEquationSolver { public static void main(String[] args) { ...

    java命令行文件管理器

    Java是一种面向对象的编程语言,具有跨平台的特性,这意味着用Java编写的程序可以在任何支持Java的设备上运行,只需一次编写,到处运行。它的强类型系统和自动内存管理使得编写健壮的应用变得相对简单。 在这个...

    java编写的简单的单位换算工具

    Java编写的简单单位换算工具是一款实用的软件应用,它基于Java编程语言,旨在帮助用户进行各种物理量的单位转换。这款工具适用于那些需要在不同单位系统之间转换测量值的人,比如学生、工程师或者日常生活中的普通...

Global site tag (gtag.js) - Google Analytics