- 浏览: 2869554 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
Args4J 是一个用来出来命令行的工具.
在实际的项目中用到命令行的并不是很常见,但当真正使用到时,特别是在程序启动时配置一下参数的时候就很有用了,如果参数很多的话,一个一个解析命令行还是比较麻烦的.这时使用Args4J就相当好办了. 在本文中我们来看看Args4J的使用,当需要时能提供一个解决方案.
Args4J使用一个被称为Option类的类来保存输入的参数,让后根据该类来应用参数,每个参数可以对应一个类中的属性,该属性用Annotation注释,在Annotation中给出该参数 的选项, 还可以配置其他有用的信息.该Annotation就是 Option 注解: 该注解的doc如下:
Marks a field/setter that receives a command line switch value.
This annotation can be placed on a field of type T or the method of the form void methodName(T value). Its access modified can be anything, but if it's not public, your application needs to run in a security context that allows args4j to access the field/method (see AccessibleObject.setAccessible(boolean).
The behavior of the annotation differs depending on T --- the type of the field or the parameter of the method.
Boolean Switch
When T is boolean , it represents a boolean option that takes the form of "-OPT". When this option is set, the property will be set to true.
String Switch
When T is String, it represents an option that takes one operand. The value of the operand is set to the property.
Enum Switch
When T is derived from Enum, it represents an option that takes an operand, which must be one of the enum constant. The comparion between the operand and the enum constant name is done in a case insensitive fashion.
For example, the following definition will represent command line options like "-coin penny" or "-coin DIME" but things like "-coin" or "-coin abc" are errors.
enum Coin { PENNY,NICKEL,DIME,QUARTER }
class Option {
@Option(name="-coin")
public Coin coin;
}
File Switch
When T is a File, it represents an option that takes a file/directory name as an operand.
该注解有5各域 其中name是必须的,其他四个是可选的.如下所示,关于该注解的详细Doc请查看 其docs.
Required Element Summary
=======================
String
name
Name of the option, such as "-foo" or "-bar".
Optional Element Summary
Class<? extends OptionHandler>
handler
Specify the OptionHandler that processes the command line arguments.
String
metaVar
When the option takes an operand, the usage screen will show something like this:
boolean required
Specify that the option is mandatory.
String
usage
Help string used to display the usage screen.
当命令行设定后 其使用方式和java 命令里面的参数使用方式一样 如:java -cp ./calssPath/.......
下面通过一个例子来解释:
/* * Created on 2006-2-21 * @author icerain */ package test.args4j; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.ExampleMode; import org.kohsuke.args4j.Option; import org.kohsuke.args4j.spi.BooleanOptionHandler; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class TestArgs4J { // 利用Option注解来定义一个boolean 命令行参数 其参数name为 -re ,required指定该参数是必须的 @Option(name = "-re", usage = "recursively run something", required = true) private boolean recursive; //利用Option注解定义一个File 命令行参数, name为-o, 输入时候知道该file的路径就可以了 //metaVar 用来设定显示 使用方式时候的输出,这个输出为-o OUTPUT : output to this file //如果不指定该属性 则使用默认的代替 为-o FILE : output to this file @Option(name = "-o", usage = "output to this file", metaVar = "OUTPUT") private File out = new File("."); //If 'usage' value is empty, the option will not be displayed // in the usage screen. //注意该处没有指定 usage 属性 或者指定usage 但是其值为空的 如usage = "",这样当使用 //parser.printExample(ExampleMode.ALL) 请注意下面第92行的输出 @Option(name = "-str", required = true) //@Option(name = "-str", usage = "测试", required = true) // 该行 -str参数有用 // no usage private String str = "(default value)"; // 整数参数 @Option(name = "-n", usage = "repeat <n> times\nusage can have new lines in it and also it can be verrry long") private int num = -1; // using 'handler=...' allows you to specify a custom OptionHandler // implementation class. This allows you to bind a standard Java type // with a non-standard option syntax //指定一个特定的handler @Option(name = "-custom", handler=BooleanOptionHandler.class,usage="boolean value for checking the custom handler") private boolean data; // receives other command line parameters than options @Argument private List<String> arguments = new ArrayList<String>(); public static void main(String[] args) throws IOException { new TestArgs4J().doMain(args); } public void doMain(String[] args) throws IOException { //Creates a new command line owner that parses arguments/options and set them into the given object. CmdLineParser parser = new CmdLineParser(this); try { // parse the arguments. parser.parseArgument(args); // you can parse additional arguments if you want. // parser.parseArgument("more","args"); // after parsing arguments, you should check // if enough arguments are given. if (arguments.isEmpty()) throw new CmdLineException("No argument is given"); } catch (CmdLineException e) { // if there's a problem in the command line, // you'll get this exception. this will report // an error message. System.err.println(e.getMessage()); //打印出错消息 System.err.println("java SampleMain [options...] arguments..."); // print the list of available options parser.printUsage(System.err); // 打印参数的用法 System.err.println(); System.err.println("测试!!!!!"); // print option sample. This is useful some time System.err.println(" Example: java SampleMain" + parser.printExample(ExampleMode.ALL)); // 注意 在Option中如果没有指定 usage 属性, System.err.println("/n 2........."); //则这两行程序不会输出该参数的使用的 System.err.println(" 2 Example2: java SampleMain" //注意 在Option中如果没有指定 usage 属性, + parser.printExample(ExampleMode.REQUIRED)); //则这两行程序不会输出该参数的使用的 return; } // this will redirect the output to the specified output System.out.println(out); if (recursive) System.out.println("-r flag is set"); if (data) System.out.println("-custom flag is set"); System.out.println("-str was " + str); if (num >= 0) System.out.println("-n was " + num); // access non-option arguments System.out.println("other arguments are:"); for (String s : arguments) System.out.println(s); } }
当不使用命令行时候 输入信息如下:
Option "-re" is required
java SampleMain [options...] arguments...
-custom : boolean value for checking the custom handler
-n N : repeat <n> times
usage can have new lines in it and also it can be verrrrrrr
rrrrrrrrrrry long
-o OUTPUT : output to this file
-re : recursively run something
测试!!!!!
Example: java SampleMain -custom -n N -o OUTPUT -re
// 注意该处没有 -str的出现
/n 2.........
2 Example2: java SampleMain -re
// 注意该处没有 -str的出现
当使用 -re 为命令行输入时,输出如下:// 后为作者加的注释 不是输出
Option "-str" is required
//也要指定-str该参数
java SampleMain [options...] arguments...
-custom : boolean value for checking the custom handler
-n N : repeat <n> times
usage can have new lines in it and also it can be verrrrrrr
rrrrrrrrrrry long
-o OUTPUT : output to this file
-re : recursively run something
测试!!!!!
Example: java SampleMain -custom -n N -o OUTPUT -re
/n 2.........
2 Example2: java SampleMain -re
当使用-re -str some 为命令行输入时,结果如下:这是由于的73 行的判断引起的
No argument is given
java SampleMain [options...] arguments...
-custom : boolean value for checking the custom handler
-n N : repeat <n> times
usage can have new lines in it and also it can be verrrrrrr
rrrrrrrrrrry long
-o OUTPUT : output to this file
-re : recursively run something
测试!!!!!
Example: java SampleMain -custom -n N -o OUTPUT -re
/n 2.........
2 Example2: java SampleMain -re
使用-custom -n 2 -re -str some otherstring 为命令行输入时的 结果如下:
. // file
-r flag is set
-custom flag is set
-str was some
-n was 2
other arguments are:
otherstring
当使用-custom -n 2 -re -str some -o log.txt otherstring 时候的输出如下:
log.txt
-r flag is set
-custom flag is set
-str was some
-n was 2
other arguments are:
otherstring
当使用一个不存在的参数时候 会有Exception的 例如:-custom -ee 2 -re -str some -o log.txt otherstring
其中-ee参数不存在 结果如下:
"-ee" is not a valid option
java SampleMain [options...] arguments...
-custom : boolean value for checking the custom handler
-n N : repeat <n> times
......
由以上的实例可以看出 args4J 取得命令行的输入参数,然后根据保存参数的类中的属性类型比较
并转换为适当的值, 然后我们可以使用这些属性了,这样就免去了自己判断args 的麻烦了,
当默认的Handler不满足你的要求时 可以自己扩展Handler实现,关于这点请参考Args4J的测试用例.
发表评论
-
高级Java程序员值得拥有的10本书
2015-05-04 07:24 810Java是时下最流行的编程语言之一。市面上也出现了适合初学者 ... -
深入理解java异常处理机制
2015-01-30 09:30 13271. 引子 try…catch…fi ... -
java 运行时参数设置
2015-01-07 09:13 865JVM的运行时参数: -Xms为执行单元内存的1/4, ... -
每个Java开发者都应该知道的5个JDK工具
2014-12-29 12:37 1139JDK是Java语言的软件开 ... -
使用双重锁判定可以大幅降低锁的征用
2014-12-29 12:30 746class ObjInstance { //单例 pri ... -
MAVEN Scope使用说明
2014-11-24 09:40 757在Maven的依赖管理中,经常会用到依赖的scope设置。这 ... -
Spring4 quartz job xml configuration
2014-11-11 09:46 14371. 定义job details public ... -
Add items into list in one line using guava
2014-11-10 10:54 721//@formatter:off fina ... -
配置动态读取(变化)文件 in Spring
2014-11-10 08:51 13231. 从环境变量中读取路径: <bean id=&q ... -
JAVA实现AES加密与解密
2014-11-04 15:34 659package com.eifesun.monitor.up ... -
Netty4.x分析
2014-07-31 11:06 1461官网定义: netty是一个异步、事件驱动的网络应用框架,用 ... -
Ways to sort lists of objects in Java based on multiple fields
2014-07-21 17:19 7711. the first way: Sorting wit ... -
how to parse a String to BigDecimal
2014-07-21 10:08 917private BigDecimal parsePrice( ... -
order list using google guava
2014-07-21 09:08 883Predicate<String> filter ... -
Java 读文件操作
2014-07-08 14:09 8861. only use java core, no exte ... -
怎样使Java 中测试按一定顺序执行
2014-03-10 11:27 1318@FixMethodOrder(MethodSorters. ... -
如何实现在当类初始化时,自动调动某个方法
2014-02-14 14:44 964有两种思路, 1. 将这个类实现为thread类 (or ... -
持续集成JenkinsAPI常见用法
2014-02-10 13:54 43jenkins(持续集成开源工具)提供了丰富的api接口,基 ... -
Sonar 安装与使用
2014-01-13 10:49 1730Sonar 是一个用于代码质量管理的开放平台。通过插件机制, ... -
源代码管理分析工具 Source Navigator的安装与使用
2014-01-13 09:51 1891Source-Navigator是原来redhat开发的一个 ...
相关推荐
4. **文档生成**:args4j-helpers可以自动生成关于命令行选项的文档,这对于提供给用户清晰的使用指南非常有帮助。 5. **错误处理**:当用户提供的命令行参数不符合预期时,args4j-helpers可以提供友好的错误提示,...
《exe4j使用详解——Java应用打包为exe的步骤指南》 在Java开发环境中,有时候我们需要将应用程序打包成Windows下的可执行文件(exe),以便于非开发人员方便使用。这时,exe4j就成为了一个非常实用的工具。exe4j是...
### Docx4j操作PPT指南 #### 一、概述 在现代办公环境中,PowerPoint (PPT) 是一种常用且重要的演示工具。随着技术的发展,越来越多的企业希望通过自动化的方式生成PPT文档,以提高工作效率。在众多解决方案中,**...
而"log4j的使用.pdf"则是一份详细的使用指南,涵盖了Log4j的配置、API使用、性能优化等方面,是学习和掌握log4j的重要参考资料。 最后,"apache-log4j-1.2.15.zip"是Log4j的源码包,对于想要深入了解其内部实现机制...
这些文档通常包括了软件的快速入门指南、用户手册、API参考等,可以帮助你更深入地理解和使用exe4j。 总结,exe4j是Java开发者在Windows平台上发布自包含应用程序的一个有力工具。通过合理使用exe4j,不仅可以简化...
提供的压缩包文件"Log4j2文档"很可能包含了Log4j2的官方用户指南、API参考和示例等内容。这个文档将详细介绍Log4j2的所有功能、配置选项以及如何在实际项目中有效利用它们。通过阅读这些文档,开发者可以更深入地...
`barcode4j` 可以作为独立的命令行工具使用,也可以通过Java API在应用程序中调用。对于Web应用程序,可以集成到Apache FOP ( Formatting Objects Processor) 中,生成带有条形码的PDF文档。 ### 7. 示例代码 ```...
### 配置Log4j的详细指南:最佳的日志管理工具 #### 一、引言 在软件开发过程中,良好的日志记录对于调试、维护和性能优化等方面具有至关重要的作用。Log4j作为Apache下的一个开源项目,因其高度灵活性、易配置性...
- `说明.txt`:通常,这个文件会包含关于dom4j库的使用指南、版本信息、许可协议或者其他重要的开发者注意事项。 **使用dom4j** 要使用dom4j-2.0.3.jar,开发者需要将其添加到Java项目的类路径中。在Maven或Gradle...
同时,我们还会提及Dom4j API的CHM英文版,它为开发者提供了详细的函数参考和使用指南。 首先,我们需要理解Dom4j的基本概念。Dom4j是一个灵活且高性能的Java库,它提供了XML、XPath和XSLT的处理能力。与Java内置的...
"Readme-说明.htm"文件通常包含了关于exe4j的详细使用指南、注意事项和可能遇到的问题解决方案。在使用过程中,如果遇到任何疑问或困难,应该首先查阅这个文件,了解软件的具体操作步骤和常见问题解答。 总的来说,...
总之,《log4j手册》为开发者提供了全面的log4j框架使用指南,不仅涵盖了基本的安装和配置步骤,还包括了高级功能的详细介绍,对于希望利用log4j优化Java应用程序日志管理的开发者来说,是一部不可或缺的资源。
使用exe4j,开发者可以自定义可执行文件的许多方面,包括图标、启动选项、内存设置、JVM参数等。此外,exe4j还提供了集成的Java Classpath构建器,帮助开发者管理复杂的依赖关系。它支持多模块项目,允许将多个jar...
4. README文件:通常会提供项目介绍、安装指南、如何运行测试等信息。 5. 示例或示例合约:展示如何使用web3j库与智能合约进行交互。 6. 构建脚本:如`gradlew`,用于执行Gradle任务的脚本。 总的来说,"web3j-...
要使用 pinyin4j,首先需要将其库文件(通常为jar包)引入到项目中。在压缩包中,`lib` 目录包含了 pinyin4j 的库文件。在Java项目中,可以将这个库添加到类路径,以便在代码中使用。 **3. API详解** - `...
本文将详细介绍pinyin4j库的核心概念和使用方法。 1. **pinyin4j概述** pinyin4j是一个开源项目,由Barry De Zwart开发,主要用于将汉字转换为对应的拼音。它支持全拼和简拼,并且可以处理多音字,提供多种输出...
为了使用Barcode4J,开发者首先需要将其库文件加入到项目的类路径中,然后通过创建`BarcodeGenerator`对象,设置必要的参数(如条形码类型、数据内容等),最后调用生成方法将条形码写入到指定的输出流中。...
### VIM 文本编辑器基本使用指南 #### 模式 VIM(Vi IMproved)是一种高度可配置且功能强大的文本编辑器,在 Linux 和其他 Unix 类操作系统中广泛使用。了解其工作模式对于高效使用至关重要。 - **普通模式**:这...
使用args4j时,首先需要在类中定义选项,通过使用特殊的注解如@Option和@Argument。例如,你可以定义一个名为`port`的选项,其默认值为8080,使用如下代码: ```java @Option(name = "-p", aliases = "--port", ...
### Java程序转换为EXE文件的方法详解:使用exe4j工具 #### 一、概述 在实际的应用场景中,为了方便非技术用户使用Java应用程序,通常需要将其转换为Windows平台下的可执行文件(.exe)。这不仅可以提升用户体验,...