コマンドライン引数としてファイルを受け取るにはどうすればよいですか?
4 に答える
ファイルのパスだけが渡され、プログラム内で Java File クラスを使用して処理します
これは、最初のパラメーターをファイル パスとして受け取ります。
import java.io.File;
public class SomeProgram {
public static void main(String[] args) {
if(args.length > 0) {
File file = new File(args[0]);
// Work with your 'file' object here
}
}
}
Java では、main
お気づきかもしれませんが、メソッドは String の配列を引数として受け取ります。パラメータに別の名前を付けることもできますargs
が、これが最もよく使用されます。
配列args
には、クラス名の後に、プログラムの起動時にユーザーが入力した値が含まれています。たとえば、Foo という名前のクラスを実行するには、ユーザーは次のように入力する必要があります。
[user@desktop ~]$ Java Foo
クラス名の後にユーザーが入力するものはすべてパラメーターと見なされます。例えば:
[user@desktop ~]$ java Foo bar baz
これで、プログラムはbarとbazの 2 つのパラメーターを受け取りました。これらのパラメータは配列に格納されますargs
。通常の Java 配列として、最初のパラメータは にアクセスargs[0]
して取得でき、2 番目のパラメータは にアクセスして取得できますargs[1]
。無効な位置にアクセスしようとすると (ユーザーが予期したとおりに入力しなかった場合)、そのステートメントはArrayIndexOutOfBoundsException
配列の場合と同様に をスローします。で入力されたパラメーターの数を確認できますargs.length
。
それで、あなたの質問に戻ります。main
ユーザーはファイル名をコマンド ライン パラメータとして通知することができ、通常は と呼ばれるメソッドの引数を通じてその値を読み取ることができますargs
。彼が本当に引数として何かを入力したかどうかを確認する必要があり (配列の長さを確認します)、問題がなければ、彼が入力したargs[0]
ものを読み取るためにアクセスします。次に、File
その文字列に基づいてオブジェクトを作成し、それでやりたいことを行うことができます。ユーザーが期待する数のパラメーターを入力したかどうかを常に確認してください。そうでない場合、配列にアクセスするときに例外が発生します。
コマンド ライン パラメーターの使用方法の完全な例を次に示します。
public class Foo {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("no arguments were given.");
}
else {
for (String a : args) {
System.out.println(a);
}
}
}
}
このクラスは、ユーザーから通知されたパラメーターを解析します。彼が何も入力していない場合、クラスは「引数が指定されていません」というメッセージを出力します。彼が任意の数のパラメーターを通知すると、それらのパラメーターが画面に表示されます。したがって、この回答で指定した2つの例でこのクラスを実行すると、出力は次のようになります。
[user@desktop ~]$ java Foo
引数が指定されていません。
[user@desktop ~]$ java Foo bar baz
bar
baz
私の意見では、args == 0 を検出して、引数が指定されていない場合にプログラムの使用方法に関するヘルプ コマンドのリストを返すのがベスト プラクティスです。