Java - コマンドライン引数の入力を受け取る

ターミナルやコマンドラインでJavaプログラムを実行するときは、プログラムに引数を渡すことができ、 main()関数の中で引数を受け取り、処理することができます。

1. コマンドライン(Command line)から引数を受け取る

Javaプログラムが実行されるとき、渡される引数は main(String[] args) から args です。

  • 引数を渡さない場合、argsの配列サイズは0です。
  • 引数を1つ渡すと、argsのサイズは1になり、args[0]でアクセスできます。

以下のように渡された引数を出力するコードを実装しました。

public class Example {

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("args size is 0");
            return;
        }

        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i +"] = " + args[i]);
        }
    }
}

端末でjavac命令でjavaコードをコンパイルすると

$ javac Example.java

以下のようにjava命令で実行させることができます。実行中に引数を何も渡さなかったため、argsの配列サイズは0になります。

$ java Example
args size is 0

以下のように引数 a を渡すと args のサイズは 1 になり、 args[0] に格納されます。

$ java Example a
args[0] = a

3つの引数を渡すと、渡した数だけ配列サイズが大きくなり、入力した順序でインデックスにアクセスできます。

$ java Example a 100 200
args[0] = a
args[1] = 100
args[2] = 200

2. String、Integer、Doubleを引数として受け取る

引数はすべてStringに渡されるので、必要であればStringをInteger、Doubleなどでparsingして希望の型に変換する必要があります。

次の例は3つの引数を受け取り、文字列をIntegerとDoubleに変換します。

public class Example {

    public static void main(String[] args) {
        if (args.length < 3) {
            System.out.println("Invalid arguments, size: " + args.length);
            return;
        }

        try {
            String name = args[0];
            int age = Integer.parseInt(args[1]);
            double score = Double.parseDouble(args[2]);
            System.out.println("name: " + name + ", age: " + age + ", score: " + score);
        } catch (Exception e) {
            System.out.println("Parsing error : " + e);
        }
    }
}

引数を3つ入力しないと、解析せずにプログラムを終了するようにしました。

$ java Example 1
Invalid arguments, size: 1

以下のようにString、int、doubleの順に渡すと解析が成功し、内容を出力します。

$ java Example John 35 95.0
name: John, age: 35, score: 95.0

以下のように3つの引数を渡しましたが、間違ったタイプのデータを渡したときは解析エラーが発生します。エラーが発生した場合、デフォルト値を使用するように実装するなどの例外処理を行うことができます。

$ java Example John 35 Ten
Parsing error : java.lang.NumberFormatException: For input string: "Ten"
codechachaCopyright ©2019 codechacha