アキはフリーランスのプログラマーです >> Java
Sponsored link

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース

コモンズ CLI(Commons-cli)

コマンドラインの引数を処理するためのApache Jakarta ProjectのAPIです。

公式サイト

ライセンスはApache License2.0のオープンソースです。

使用例

基本的にBasicParserを使います。

引数エラーは以下のように処理

private void showHelp() {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp(getClass().getName(), options);
		System.exit(0);
	}

単独のパラメターを処理する

二つ目の引数にfalseを渡します。これは値をもたないという意味です。

options.addOption(new Option("version", false, "version infomation"));

/*
 * 作成日: 2004/05/26
 * License Apache 2.0
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package example;
import org.apache.commons.cli.*;
/**
 * @author ak
 * License Apache 2.0
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 * input 
 * output
 */
public class arg1 {
	Options options;
	
	public arg1(String args[]){
		parseArg(args);
	}
	public static void main(String[] args) {
	arg1 sample=new arg1(args);
	}
	
	
	private final void parseArg(String args[]) {
		
			options=new Options();
			options.addOption(new Option("version", false, "version infomation"));
			
			CommandLineParser parser = new BasicParser();

			try {
				CommandLine cmd = parser.parse(options, args);
				
				if (cmd.hasOption("version")) {
				parseVersion(cmd);
				}

			} catch (ParseException e) {
				showHelp();
			}

		}
	/**
	 * @param cmd
	 */
	private void parseVersion(CommandLine cmd) {
		System.out.println("version 1.0");
		System.exit(0);
	}
	/**
	 * 
	 */
	private void showHelp() {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp(getClass().getName(), options);
		System.exit(0);
	}




}

値を持つパラメターを処理する

2つ目の引数にtrueを渡します。これは値をもつという意味です。

options.addOption(new Option("input", true, "input file"));


マイナスから始まる値はこのペアーでとる方式でないとうまくいかないようです。

-x -100 -y -200 など

/*
 * 作成日: 2004/05/26
 * License Apache 2.0
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package example;
import org.apache.commons.cli.*;
/**
 * @author ak
 * License Apache 2.0
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 * input 
 * output
 */
public class arg2 {
	Options options;
	private String input;
	public arg2(String args[]){
		parseArg(args);
	}
	public static void main(String[] args) {
	arg2 sample=new arg2(args);
	System.out.println("input = "+sample.getInput());
	}
	
	
	private final void parseArg(String args[]) {
		
			options = new Options();
			options.addOption(new Option("input", true, "input file"));
			
			CommandLineParser parser = new BasicParser();

			try {
				CommandLine cmd = parser.parse(options, args);
				parseInput(cmd,cmd.getOptionValue("input"));
				
			} catch (ParseException e) {
				showHelp();
			}

		}
		

	/**
	 * @param cmd
	 * @param string
	 */
	private void parseInput(CommandLine cmd, String value) {
		input=value;
	}
	private void showHelp() {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp(getClass().getName(), options);
		System.exit(0);
	}
	/**
	 * @return
	 */
	public String getInput() {
		return input;
	}


	/**
	 * @param string
	 */
	public void setInput(String string) {
		input = string;
	}



}

パラメーター以外を処理する

params=cmd.getArgs();

でその他の値を取得できます。

/*
 * 作成日: 2004/05/26
 * License Apache 2.0
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package example;
import org.apache.commons.cli.*;
/**
 * @author ak
 * License Apache 2.0
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 * input 
 * output
 */
public class arg_param {
	Options options;
	String params[];
	public arg_param(String args[]){
		parseArg(args);
		System.out.println("param "+params.length);
		
		for(int i=0;i<params.length;i++){
			System.out.println(params[i]);
		}
	}
	public static void main(String[] args) {
	arg_param sample=new arg_param(args);
	}
	
	
	private final void parseArg(String args[]) {
		
			options=new Options();
			CommandLineParser parser = new BasicParser();
			
			try {
				CommandLine cmd = parser.parse(options, args);
				
				params=cmd.getArgs();
				
			} catch (ParseException e) {
				showHelp();
			}

		}
	/**
	 * 
	 */
	private void showHelp() {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp(getClass().getName(), options);
		System.exit(0);
	}




}



複合

上記、3つをあわせた例です。

/*
 * 作成日: 2004/05/26
 * License Apache 2.0
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package example;


import org.apache.commons.cli.*;
/**
 * @author ak
 * License Apache 2.0
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 * input 
 * output
 */
public class mix {
	Options options;
	String input;
	
	String params[];
	public mix(String args[]){
		parseArg(args);
		System.out.println("input = "+input);
	
		System.out.println("param "+params.length);
		for(int i=0;i<params.length;i++){
						System.out.println(params[i]);
					}
	}
	public static void main(String[] args) {
	mix sample=new mix(args);
	
	}
	
	
	private final void parseArg(String args[]) {
			
			options=new Options();
			
			options.addOption(new Option("debug", false, "is debug"));
			options.addOption(new Option("input", true, "input file"));
			
			CommandLineParser parser = new GnuParser();
			
			try {
				CommandLine cmd = parser.parse(options, args);
				
				if (cmd.hasOption("debug")) {
				parseDebug(cmd);
				}
				
				parseInput(cmd,cmd.getOptionValue("input"));
				
				params=cmd.getArgs();

			} catch (ParseException e) {
				showHelp();
			}

		}
	/**
	 * @param cmd
	 */
	private void parseDebug(CommandLine cmd) {
		System.out.println("debug mode");

	}
	/**
	 * 
	 */
	
	private void parseInput(CommandLine cmd, String value) {
			input=value;
		}
		
	private void showHelp() {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp(getClass().getName(), options);
		System.exit(0);
	}




}

私の使っているテンプレート

必須項目などは複雑な条件になることが多いのでやりません。


値を持たないパラメーターを処理する

private void parse{値名}(CommandLine cmd) {

}

値を持つパラメターを処理する

private void parse{値名}(CommandLine cmd, String value) {

}

パラメーター以外を処理する

フィールド

String params[];

に入れる。

使用例

/*
 * 作成日: 2004/05/26
 * License Apache 2.0
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package example;


import org.apache.commons.cli.*;
/**
 * @author ak
 * License Apache 2.0
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 * input 
 * output
 */
public class template {
	Options options;
	//value
	String input;
	String params[];
	public template(String args[]){
		parseArg(args);
		
	}
	public static void main(String[] args) {
	template sample=new template(args);
	
	}
	
	
	private final void parseArg(String args[]) {
			
			options=new Options();
			
			options.addOption(new Option("debug", false, "is debug"));
			options.addOption(new Option("input", true, "input file"));
			
			CommandLineParser parser = new GnuParser();
			
			try {
				CommandLine cmd = parser.parse(options, args);
				
				if (cmd.hasOption("debug")) {
				parseDebug(cmd);
				}
				
				parseInput(cmd,cmd.getOptionValue("input"));
				
				params=cmd.getArgs();

			} catch (ParseException e) {
				showHelp();
			}

		}
	/**
	 * @param cmd
	 */
	private void parseDebug(CommandLine cmd) {
		System.out.println("debug mode");

	}
	/**
	 * 
	 */
	
	private void parseInput(CommandLine cmd, String value) {
			input=value;
		}
		
	private void showHelp() {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp(getClass().getName(), options);
		System.exit(0);
	}




}

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース