コマンドプロンプトを利用したプログラムを作成する際に、ユーザーが入力したデータを利用したい場合があります。
ユーザーの入力したデータを扱うにはいくつかの方法がありますが、今回はコマンドライン引数を利用します。
もくじ
コマンドライン引数とは
通常、Javaを実行する際には以下の記述で実行します。
Javaの実行 | java クラス名 |
---|---|
記述例 | java Sample |
コマンドライン引数は、クラス名の後に半角スペースを入力後、プログラムに渡したいデータを入力します。複数のデータを渡したい場合は、コマンドライン引数同士を半角スペースで区切ります。(全角スペースではないので注意)
Javaの実行 | java クラス名 コマンドライン引数 |
---|---|
記述例 | java Sample 100 java Sample 100 200 |
記述例は100というデータを渡す場合と、100と200のデータを渡す場合の実行例となります。
コマンドライン引数をプログラム内で扱う
コマンドライン引数をプログラム内で扱う場合には、main()メソッドの引数を利用します。具体的には以下の部分です。
※メソッドの引数については別の記事で紹介します
public static void main(String[ ] args)
下線部分は、String配列のargsと呼ばれる配列名を利用しています。配列名はargsでなくてもかまいませんが、String配列でなくてはなりません。
args配列を利用して、Java実行時に入力されたコマンドライン引数を扱うことができます。
上図のように、実行時に入力されたデータがargs配列内に格納されます。また、半角スペースで100と200が入力されており、args内には2つのデータが格納されることになります。
コマンドライン引数 サンプルプログラム
以下のプログラムを「Number23.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
1 2 3 4 5 6 7 |
class Number23{ public static void main(String[] args){ //コマンドライン引数のデータを扱う System.out.println(args[0]); System.out.println(args[1]); } } |
実行例
C:\work>javac Number23.java
C:\work>java Number23 100 200
100
200
C:\work>java Number23 100 200 300
100
200
C:\work>java Number23 100
100
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
at Number23.main(Number23.java:5)
コンパイルおよび実行例です。実行は3回行っています。
Number23の補足
コマンドライン引数に入力されるデータは実行時までどのようなデータが入力されるかわかりません。
今回、Number23.javaはプログラム内でargs[0]とargs[1]を表示処理しています。コマンドライン引数でデータが2つ以上入力されている場合は問題なく動作します。
しかし、実行時にコマンドライン引数が入力されないもしくは1つしか入力されないと、配列内のデータが扱えないため、実行時にエラーが起こります。
コマンドライン引数で入力されたデータの数を取得する
コマンドライン引数で入力されたデータの数を取得するには、「配列名.length」を利用しargs配列の中に格納されているデータの数で確認できます。
Number23は以下のように変更すると実行時エラーが起こらなくなります。
1 2 3 4 5 6 7 8 9 |
class Number23{ public static void main(String[] args){ //配列分ループを回す for(int i = 0; i < args.length; i++){ //コマンドライン引数のデータを扱う System.out.println(args[i]); } } } |
コマンドライン引数の注意点
コマンドライン引数はString配列を扱うため、数字を入力しても計算処理を行うことができません。
※main()メソッドの引数をint配列に変更してもコンパイルエラーは起こりませんが実行時エラーが発生します
コマンドライン引数で入力されたデータを計算に利用する場合は、Stringをintやdoubleに変換する必要があります。
※変換処理に関しては別途記事で紹介します
コマンドライン引数 復習問題
- コマンドライン引数の説明で正しいものを選んでください。※コマンドライン引数の配列名はargsとします
- 解答群
- コマンドライン引数は1つしか入力できない
- コマンドライン引数はString配列で利用する
- コマンドライン引数はint配列に変更することができる
- argsという配列名は変更できない
- コマンドライン引数に100と200を入力した際に、以下のプログラムでどのような結果になるか選んでください。※コマンドライン引数の配列名はargsとします
1System.out.println(args[0] + args[1]) - 解答群
- 300が表示される
- 100200が表示される
- コンパイルエラー
- 実行時エラー
- コマンドライン引数に100を入力した際に、以下のプログラムでどのような結果になるか選んでください。※コマンドライン引数の配列名はargsとします
1System.out.println(args[0] + args[1]) - 解答群
- 300が表示される
- 100200が表示される
- コンパイルエラー
- 実行時エラー
- コマンドライン引数の数を取得する際の記述で正しいものを選んでください。※コマンドライン引数の配列名はargsとします
- 解答群
- args.length
- args.length()
- args.size
- args.size()
- お疲れ様でした。
まとめ
- コマンドライン引数はString配列で利用する
- コマンドライン引数では複数のデータを扱うことができる
- コマンドライン引数の数を取得するには「args.length」