package javacodebook.misc.getopt; import gnu.getopt.*; /** * Auslesen von Übergabeparametern an eine Anwendung. */ public class GetOptTest { public static void main(String[] args) { // Option f mit optionalem Argument, o mit obligatorischen Argument sowie // Optionen v und h (jeweils ohne Argument). String optStr = "vho::f:"; // Die Optionen h, o und f gibt es auch in langer Form. LongOpt[] longopts = new LongOpt[3]; longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h'); longopts[1] = new LongOpt("output", LongOpt.REQUIRED_ARGUMENT, null, 'o'); longopts[2] = new LongOpt("from", LongOpt.OPTIONAL_ARGUMENT, null, 'f'); // Einen Parser für Optionen erzeugen. Als ersten Parameter erwartet // Getopt den Namen der Anwendung. Getopt g = new Getopt("GetOptTest", args, optStr, longopts); String arg; int c; // Getopt soll keine eigenen Fehlerausgaben erzeugen. Darum kümmern wir // uns selbst. g.setOpterr(false); // Die Liste der Optionen durchlaufen. Eine Option wird als int-Wert // zurückgegeben. while((c = g.getopt()) != -1) { switch(c) { // Option o (oder output) mit obligatorischem Argument case 'o': arg = g.getOptarg(); System.out.println("Option o mit Argument: " + arg); break; // Option f (oder from) mit optionalem Argument case 'f': arg = g.getOptarg(); System.out.println("Option f (from) mit Argument: " + arg); break; // Option v ohne Argument case 'v': System.out.println("Option gefunden: " + (char)c); break; // Option h (oder help) ohne Argument case 'h': System.out.println("Option h (help) gefunden"); break; // Unerlaubte Optionen werden über '?' referenziert. // getOptopt enthält die unerlaubte Option case '?': char wrong = (char)g.getOptopt(); System.out.println("Ungültige Option: " + wrong); } } } }