If you are using Eclipse, you might want to add your arguments. To specify them, go to: Run → Run Configurations ... → Arguments
args4j
args4j is a small Java class library that makes it easy to parse command line options/arguments in your CUI application.
Source: args4j.kohsuke.org
Lets see how easy it really is.
Requirements
First, you have to get the package. It is not in my Ubuntu-Version, but Ubuntu Quantal will have args4j. The package is called libargs4j-java
.
If you can't install it this way, you have to download args4j. Currently, it is args4j-2.0.21.jar.
You can add this as an external jar to Eclipse:
- Right-click on your project.
- Select "Properties"
- Type "java build path" in the input field at the upper left corner of the window.
Now it should look like this:
Now you have to click on "Add External Jar" and add the args4j.jar file.
Source Example
As always in Java, you add another class for parsing your command line values. I've called it CommandLineValues.java and it does only check for the command line argument -i FILE
or --input FILE
.
import java.io.File;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
/**
* This class handles the programs arguments.
*/
public class CommandLineValues {
@Option(name = "-i", aliases = { "--input" }, required = true,
usage = "input file with two matrices")
private File source;
private boolean errorFree = false;
public CommandLineValues(String... args) {
CmdLineParser parser = new CmdLineParser(this);
parser.setUsageWidth(80);
try {
parser.parseArgument(args);
if (!getSource().isFile()) {
throw new CmdLineException(parser,
"--input is no valid input file.");
}
errorFree = true;
} catch (CmdLineException e) {
System.err.println(e.getMessage());
parser.printUsage(System.err);
}
}
/**
* Returns whether the parameters could be parsed without an
* error.
*
* @return true if no error occurred.
*/
public boolean isErrorFree() {
return errorFree;
}
/**
* Returns the source file.
*
* @return The source file.
*/
public File getSource() {
return source;
}
}
Here is some part of the main file:
public static void main(String[] args) {
CommandLineValues values = new CommandLineValues(args);
CmdLineParser parser = new CmdLineParser(values);
try {
parser.parseArgument(args);
} catch (CmdLineException e) {
System.exit(1);
}
// Now you can use the command line values
List<ArrayList<ArrayList<Integer>>> matrices =
read(values.getSource());
ArrayList<ArrayList<Integer>> A = matrices.get(0);
ArrayList<ArrayList<Integer>> B = matrices.get(1);
int[][] C = ijkAlgorithm(A, B);
printMatrix(C);
}
Usage Examples
If you do not specify the required parameters, you get a quite good error message:
moose@pc07:~/Desktop$ java -jar matrix-multiplication.jar
Option "-i (--input)" is required
-i (--input) FILE : input file with two matrices
Help is not automatically generated:
moose@pc07:~/Desktop$ java -jar matrix-multiplication.jar --help
"--help" is not a valid option
-i (--input) FILE : input file with two matrices
If you want to have default parameters, you simply assign the values to the attributes:
@Option(name = "-l", aliases = { "--leafsize" }, required = false,
usage = "input file with two matrices")
private int leafsize = 32;
Note: How can I prevent Eclipse from adding the 'final' for certain lines of Java code?
Commons CLI
Installation
As for args4j, they offer a jar file which is in commons-cli-1.2-bin.tar.gz on the download-page.
If you just want to test if you have the required packages, copy this piece of code to Eclipse:
public class CommandLineValues {
CommandLineParser parser = new BasicParser();
}
If you get the following error, you don't have the required org.apache.commons.cli
:
Usage examples
I have not found a single, complete and working usage example.
See also
- Is there a good command line argument parser for Java? - A lot of other command line parsers are mentioned for Java.
- args4j JavaDoc
- Apache CLI JavaDoc