Javaにおけるコマンドライン引数について|Javaでコマンドライン引数を取得する方法

- システム
エンジニア - Javaにおけるコマンドライン引数について知りたいです。
- プロジェクト
マネージャー - コマンドラインの概要やコマンドラインの取得方法について解説しますので、一緒に見ていきましょう。
Javaにおけるコマンドライン引数について
この記事では、Javaにおけるコマンドライン引数(ひきすう)について、説明します。
Javaのプログラムを工夫すると、コマンドライン引数と呼ばれる引数を受け取り、それに応じて動作を変えることも出来ます。Javaにおけるコマンドライン引数について、興味のある方は、ぜひご覧ください。
コマンドライン引数とは?
さて、ではそもそもコマンドライン引数とは何なのでしょうか。もしかすると、統合開発環境などでプログラムを作成している方には、馴染みが薄いかもしれません。
Javaのプログラムを作成した場合、コマンドラインからプログラムを起動することが出来ます。例えば、Windowsに付属しているソフト「コマンド プロンプト」(Macの場合は「ターミナル」)で以下のように入力すると、コンパイル済のプログラムを起動することが出来ます。
1 |
> java [クラス名] |
実は、このクラス名の後ろに、スペース区切りで文字を入力すると、その文字がコマンドライン引数として、プログラムに渡されます。
例えば、”sample.class” というファイルに”1″、”あいう”という文字をコマンドライン引数として渡して実行したい場合、以下のように「コマンド プロンプト」へ入力します。
1 |
> java sample 1 あいう |
このように、スペースで区切れば、1つ以上の値を、コマンドライン引数としてプログラムに渡すことが出来ます。
Javaでコマンドライン引数を取得する方法
ここからは、実際にサンプルコードを示しながら、Javaでコマンドライン引数を取得する方法や、それをどのように活用していくのか、ということについて説明していきます。
簡単なサンプルコード
では早速、簡単なサンプルコードを示します。
1 2 3 4 5 6 7 8 9 |
class simple_command_in{ public static void main(String[] args) { if (args.length!=0) { System.out.println(args[0]); } else { System.out.println("コマンドライン引数がありません"); } } } |
このプログラムは、コマンドライン引数があれば1つ目のコマンドライン引数を、コマンドライン引数がなければ「コマンドライン引数がありません」と出力するプログラムになっています。
このソースコードを見ると分かる通り、Javaにおいて、コマンドライン引数は、main関数への引数として、渡されます。より具体的には、
1 |
main(String[] args) |
で定義されている、String型の配列としてコマンドライン引数をプログラム内から参照することが出来ます。
配列ですので、1つ目のコマンドライン引数を取得する場合はargs[0]、2つ目のコマンドライン引数を取得する場合は args[1] というように指定することで、コマンドライン引数を自由に利用することが出来ます。
また、コマンドライン引数の個数は、 args.lengthで確認することが出来ます。
応用したプログラムの例
では、コマンドライン引数を活用した、プログラムを作成してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import java.io.*; import java.util.*; import java.text.*; class cmd_files_args{ public static void main(String[] args) { try{ PrintWriter result_file=new PrintWriter("./result.csv"); result_file.println("ファイル名,拡張子,ファイルサイズ(KB),最終更新日"); for (int i=0; i<args.length; i++) { File tempfile=new File(args[i]); if(!tempfile.exists()||!tempfile.isFile()){continue;} SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss"); String lastmod=df.format(new Date(tempfile.lastModified())); String fileAllName=tempfile.getName(); String fileName=fileAllName.substring(0,fileAllName.indexOf(".")); String file_type=fileAllName.substring(fileAllName.lastIndexOf(".")+1); result_file.println(fileName+","+file_type+","+tempfile.length()/1024+","+lastmod); } result_file.close(); System.out.println("処理が完了しました"); }catch(IOException e){ System.out.println("エラーが発生しました。"); e.printStackTrace(); } } } |
このプログラムは、コマンドライン引数として渡されたファイルの、ファイル名、拡張子、ファイルサイズ、最終更新日を取得して、result.csvにCSV形式で書き出すプログラムです。使い方としては、コマンドライン(コマンドプロンプト)に
1 |
> java cmd_files_args |
まで入力し、ファイルをドラッグ・アンド・ドロップすることで、ファイルへの絶対パスがコマンドラインに引数として追加されていきます(ただし、複数のファイルを引数として指定するには、スペースを入力する必要があります)。
この状態でEnterキーを押して、プログラムを実行することでresult.csvが作成されます。
コマンドライン引数に関するよくある間違い
ここでは、コマンドライン引数に関係するよくある間違いを紹介します。
まず、コマンドライン引数を使わないならmain関数の引数を省略できるのではないか、と思う方もいるかもしれません。実はJavaの場合、コマンドライン引数がなかった場合でもmain関数には空のString型の配列が必ず渡されます。
つまり、以下のような、プログラムは、コンパイルできるものの、実行時にエラーとなります。
1 2 3 4 5 |
class simple_program{ public static void main() { System.out.println("Hello World !"); } } |
また、コマンドライン引数には数字しか使わないと決めていれば、String型の配列ではなく、int型の配列で受け取っても良いのではないか、と思う方もいるかも知れません。
しかし、先にも書いたとおり「main関数にはString型の配列が必ず渡される」という制約があります。そのため、以下のプログラムも実行することは出来ません。
1 2 3 4 5 6 |
class simple_add_program{ public static void main(int[] args) { if(args.length<2){return;} System.out.println(args[0]+args[1]); } } |
このように、Javaの仕様上の制約として、main関数は必ずString配列を引数として受け付けられるようにしなければなりません。
- システム
エンジニア - サンプルコードなどを参考に、Javaでコマンドライン引数を使ってみたいと思います。
- プロジェクト
マネージャー - コマンドライン引数を使用して、プログラムの幅を広げてみましょう。
コマンドライン引数を利用したプログラムを作ろう
いかがでしたでしょうか。この記事では、コマンドライン引数とは何か、Javaでコマンドライン引数を参照・利用するにはどうすれば良いか、ということを説明してきました。
コマンドライン引数を参照し、それにあわせて挙動の変わるプログラムを作成することで、よりプログラムの幅を広げることが出来ます。
ここで紹介したサンプルプログラムを参考にしながら、ぜひ一度、ご自身でプログラムを作成し、Javaにおけるコマンドライン引数についての理解を深めてみてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)