Option
class is used to specify single command line option.
You
can specify following properties to an Option instance.
a.
Short
name of the option
b.
Long
name of the option
c.
Description
to this option
d.
Flag
indicating if an argument is required for this option
Option
class provide following constructors to define an instance.
public
Option(String opt, String description)
public
Option(String opt, boolean hasArg, String description)
public
Option(String opt, String longOpt, boolean hasArg, String description)
Each argument is
described below
opt:
Short representation of the option
longOpt:
long representation of the option
description:
Describes the function of the option
hasArg:
specifies whether the Option takes an argument or not
For example, I am
going to build the help to the linux command 'ls'
First
we need to define options for the command ls.
Option
option1 = new Option("A", "almost-all", false, "do not
list implied . and ..");
Option
option2 = new Option("c", "with -lt: sort by, and show, ctime
(time of last modification of file status information) with -l:show ctime and
sort by name otherwise: sort by ctime");
Option
option3 = new Option("b", "block-size", true, "use
SIZE-byte blocks");
Add
all the options of ls command to Options class.
Options
options = new Options();
options.addOption(option1).addOption(option2).addOption(option3);
Commons-CLI
provides ‘HelpFormatter’ class to format the options.
public
static void printHelp(final Options options, final int width, final String
cmdLineSyntax,
final String header,
final String footer, final int leftPad, final int descPad, final boolean
autoUsage,
final OutputStream
out) {
PrintWriter writer = new
PrintWriter(out);
final HelpFormatter
helpFormatter = new HelpFormatter();
helpFormatter.printHelp(writer,
width, cmdLineSyntax, header, options, leftPad, descPad, footer, autoUsage);
writer.flush();
}
Following
is the complete working application.
OptionDemo.java
import java.io.OutputStream; import java.io.PrintWriter; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; public class OptionDemo { public static void printHelp(final Options options, final int width, final String cmdLineSyntax, final String header, final String footer, final int leftPad, final int descPad, final boolean autoUsage, final OutputStream out) { PrintWriter writer = new PrintWriter(out); final HelpFormatter helpFormatter = new HelpFormatter(); helpFormatter.printHelp(writer, width, cmdLineSyntax, header, options, leftPad, descPad, footer, autoUsage); writer.flush(); } public static void main(String args[]) { Option option1 = new Option("A", "almost-all", false, "do not list implied . and .."); Option option2 = new Option("c", "with -lt: sort by, and show, ctime (time of last modification of file status information) with -l:show ctime and sort by name otherwise: sort by ctime"); Option option3 = new Option("b", "block-size", true, "use SIZE-byte blocks"); Options options = new Options(); options.addOption(option1).addOption(option2).addOption(option3); printHelp(options, 100, "ls", "", "", 5, 5, false, System.out); System.out.println("\n\n\n"); printHelp(options, 100, "ls", "", "", 5, 5, true, System.out); } }
Output
usage: ls -A,--almost-all do not list implied . and .. -b,--block-size <arg> use SIZE-byte blocks -c with -lt: sort by, and show, ctime (time of last modification of file status information) with -l:show ctime and sort by name otherwise: sort by ctime usage: ls [-A] [-b <arg>] [-c] -A,--almost-all do not list implied . and .. -b,--block-size <arg> use SIZE-byte blocks -c with -lt: sort by, and show, ctime (time of last modification of file status information) with -l:show ctime and sort by name otherwise: sort by ctime
No comments:
Post a Comment