使用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()方法传递退出值

 

 

 

 

Qt Creator设计器里也能拖拽?5步将你的QML自定义控件变成可视化插件(Qt6.5+) 本文详细介绍了如何在Qt Creator设计器中实现QML自定义控件的可视化拖拽功能(Qt6.5+)。通过5个步骤,从构建可插件化的QML控件基础到部署插件到设计器环境,帮助开发者将自定义控件转化为设计器插件,提升团队协作效率。特别适合需要频繁调整UI样式的开发场景。 阅读详情

相关推荐

从Pikachu靶场实战解析越权漏洞:原理、攻击与防御

本文通过Pikachu靶场实战详细解析越权漏洞的原理、攻击方式与防御策略。文章深入探讨水平越权和垂直越权的危害,结合代码示例展示漏洞利用过程,并提供代码层和架构层的立体化防御方案,帮助开发者有效防范这一Web安全隐形杀手。

weixin_29325007的博客 356

第1章-第1节-编写第一个Java程序并在命令行编译和运行

第1章-第1节-编写第一个Java程序并在命令行编译和运行

Zwarwolf的专栏 985

74LS161/48 交通灯控制系统:30-5-20-5 时序逻辑电路 Multisim 仿真验证

本文详细解析了基于74LS161/48芯片的交通灯控制系统设计,通过Multisim仿真验证30-5-20-5时序逻辑电路。从系统架构搭建、状态机实现到波形分析,提供全流程操作指南与典型问题排查方法,助力数字电路课程设计高效完成。

weixin_26742753的博客 377

java实现命令行程序

[code="java"] /** * * 实现命令行程序 */ public class CommandArgs { /** * 遇到错误时,打印错误信息,并退出程序 * @param errmsg 错误信息 */ public static void error(String errmsg) { System.err.println(e...

百威 234

ZYNQ专题-7020驱动KSZ9031 PHY芯片

之所以有这篇文章,得益于Alinx的开发板。

Anitawen的博客 4961

STM32F429网络通信避坑指南:用CubeMX搞定LAN8720+LWIP+FreeRTOS(附完整代码)

本文详细介绍了STM32F429通过CubeMX配置LAN8720+LWIP+FreeRTOS实现网络通信的避坑指南,涵盖硬件连接、CubeMX配置、LWIP优化及调试技巧,提供完整代码和实战经验,帮助开发者高效解决以太网通信中的常见问题。

weixin_26873711的博客 145

java 命令行编译运行程序

(前提是环境变量已经配好) 1.编写一个简单的程序 java文件(he为包名) 2.定位到该程序的目录结构下(如果有包的话,就在包的上一个目录下) 3.开始编译(javac 包名\类名.java) 生成编译文件 4.执行程序(java 包名.类名(不需要.java后缀)) 额,这些基础的东西自从用了

654

现代SerDes解剖:从CTLE/DFE到PAM4与ADC+DSP架构

高速有线通信的物理层瓶颈,正从并行总线的时钟偏斜转向串行链路的信号完整性挑战。SerDes作为解决这一问题的核心技术,其内部架构远超“并转串”的朴素认知。接收端的CTLE线性均衡与DFE判决反馈均衡,配合CDR时钟恢复,共同构成对抗信道损耗与码间干扰的关键机制。随着速率迈向56G/112G,PAM4调制以电平幅度换取带宽,而ADC+DSP架构则把均衡算法搬入数字域,实现更灵活的非线性补偿。理解这些模块如何协同工作,是调试PCIe、以太网等高速链路、优化眼图余量与抖动预算的基础,也是硬件工程师从盲目调参走向系

weixin_29194817的博客 295

使用 Java 编写和编译一个简单的命令行程序

如果代码中没有错误,该命令将生成一个名为 HelloWorld.class 的字节码文件,该文件包含了程序的编译后的版本。假设我们将上面的代码保存在一个名为 HelloWorld.java 的文件中。这个程序非常简单,只是输出 "Hello, world!现在我们需要将它编译成可执行的 Java 程序。这将运行 HelloWorld 类中的 main 方法,并在控制台输出 "Hello, world!请注意,如果您在编译或运行代码时遇到了问题,请确保您已正确安装了 Java 开发工具包 (JDK)。

m0_74288308的博客 341

【100%通过率】华为OD机试真题 Python【数字最低位排序】【最低位排序】

2023华为OD机试真题 Python【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

MISAYAONE的博客 1901

华为OD机试真题 新系统【小学英语老师批改作文】

华为OD机试 新系统真题【小学英语老师批改作文】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【小学英语老师批改作文】

qq_45776114的博客 922

使用java编写一个调用第三方可执行文件的windows命令行工具

客户有一批数据需要使用一个叫wodASC.exe的程序来处理。该程序是个命令行工具,好像是用fortran写的,比较坑,后面不能带参数,只能在运行它之后,输入待处理的文件名称,选转换字段,有点繁琐,并且每次只能处理一个文件。数据文件非常多,估计好几千个,靠人工处理,几乎不可能。

左直拳的马桶_日用桶 871

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java编写基于命令行形式_使用Java编写基于命令行的程序

平时工作中,会用Java编写基于命令行的小工具。本片将介绍如何使用Java编写基于命令行的程序。命令行程序需要包含的内容命令行参数解析程序以及参数说明程序功能的实现(这个根据自己情况而定)Java中如何处理命令行参数最直接的处理命令行的方法:public class Cli {public static void main (String [] args){for(String arg : arg...

weixin_36382265的博客 822

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

在命令行终端使用vim编写C和java程序

在终端安装vim、gcc、javac,vim界面自定义,C和java的运行步骤

ZHOU的博客 761

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ubuntu java命令行_Java基础- 1. 在Ubuntu下使用命令行编写第一个Java程序

一、创建一个Java源文件打开终端窗口:在键盘上同时按下 Ctrl + Shift + T,打开终端窗口。创建一个 Java 源文件:在终端窗口输下面的命令:touch HelloWorld.java二、编写Java程序打开刚才创建的文件:在终端窗口输入下面的命令:vim HelloWorld.java如果出现未找到命令的提示,说明没有安装 vim,在命令行输入下面的命令,安装 vim 编辑器:s...

weixin_35924734的博客 1100

用命令行编写一个简单的Java程序——Hello

用命令行编写一个简单的Hello程序 环境 先要准备好编写Java程序的环境,下载好jdk, jdk的下载环境配置请看:jdk的下载和配置 步骤 编写一个Java程序,步骤为:1、编写源代码,2、编译源代码,3、运行。 编写源代码 新建一个文本文件,文件名改成Hello.java,在文本里面编写代码。代码要注意符号是英文的符号。括号是成对。文件的所在目录要记得。编译的时候需要跳到文件所在的目录下。 代码如下: public class Hello{ public static void main(Strin

leilei__66的博客 3754

用命令行编写第一个程序(二)

更多内容,点击了解:https://how2j.cn/k/helloworld/helloworld-commandline/168.html 大家真正在工作中开发 java 应用都会使用eclipse,myeclipse, IntelliJ等等 不过依然值得花10分钟学习如何使用最原始的命令行格式编译和执行java 程序 使用最原始的命令行方式来执行Hello World 目录 步骤...

java_zdc的博客 332

javac 命令行编译 java程序

很多人估计会和我

心灵港 1256

【Java】底层逻辑以及使用文本编辑器编写程序

🍡小伙伴有很多系统有Windows、Linux、Mac osx等系统,但是一个Java程序可以到处跑这是因为有一个很特殊的设计(JVM)这个Java虚拟机可以使得一个代码在各个不同的操作系统上运行那我就解释一下三者! JRE:Java文件运行测试人员所下载,作为一般的Java开发人员没必要下载JRE,但是下了也不会影响你的运行,JRE中也有运行所需要的环境。JDK和JRE二选一即可! JVM:Java虚拟机,是Java最重要的一部分,也是连接多个操作系统运行Java的最主要的东西。......

m0_46232425的博客 2683

学习用命令行编写HelloWorld

  大家真正在工作中开发 java 应用都会使用eclipse,myeclipse, IntelliJ IDEA等等。 不过依然值得花10分钟学习如何使用最原始的命令行格式编译和执行java 程序。 使用最原始的命令行方式来执行Hello World。 先看运行效果: 在控制台下运行第一个Java程序,可以看到输出了字符串 hello world 步骤一、创建项目目录 在e:盘创建一个...

塑花kai不落 1万+

编写一个程序

编写第一个java程序 第一步:新建文本文档 将后缀名改为.java 第二步:格式: public class test{ public static void main(String[] args){ System.out.println(“我的第一个程序”); } } 注意:新建的文件名必须跟代码中 class 后面的名报持一致,不能用中文 第三步:按住windos+R 然后输入 cmd 进入...

Q1871283492的博客 1269

编写和运行简单的Applet程序

Applet是一种包含在HTML网页中的Java应用程序,下面简单总结一下如何用命令行编译并运行程序。   1、首先用记事本(UltraEdit等)编写一个简单的Applet程序,并命名为SayHello.java import java.applet.*; import java.awt.*; public class SayHello extends Applet { String

Crazy_For_Net的博客 7851

如何使用记事本完成JAVA程序的编写?

如何使用记事本完成JAVA的编写呢? 首先第一步当然是打开记事本,然后输入下面这段程序. package demo;//这是定义包的语句 /**这个东西里面的都是java文档的注释 功能:输出This is My First Java Program. 类名:MyFirstJavaClass */ public class MyFirstJavaClass{ //Java程序的入口 public static void main(String []args){ //JVM会通过main方

Asaka_fx的博客 1012
上一篇: “非计算机专业如何转行做程序员” - 我的经验
下一篇: 使用node.js编写工具简化less编译(less2css.js)
lvjian700
博客等级 码龄15年 14粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值