コマンドライン引数としてファイルを受け取るにはどうすればよいですか?
ファイルのパスだけが渡され、プログラム内で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
これで、プログラムは2つのパラメーターbarとbazを受け取りました。これらのパラメータは配列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
バー
baz
私の意見では、args == 0を検出し、引数が指定されていない場合にプログラムの使用方法に関するヘルプコマンドのリストを返すことを試みるベストプラクティスです。
私は他のいくつかの解決策を見ましたが、あなたがいればそれらはうまくいかないと思います。たとえば、コマンドライン引数としてC:\Program Files\file.dat
を指定します。新しいファイルを作成するときにargs[0]
を取るだけなので、機能しません。
したがって、実際には次のようなことを行い、指定された引数のすべての部分を結合して、それからファイルを作成する必要があります。
import Java.io.File;
public class SomeProgram {
public static void main(String[] args) {
String current = "";
File lastFile = null;
for(String str : args){
File newFile = new File((current + " " + str).trim());
if(newFile.exists()){
lastFile = newFile;
}
current += " " + str;
}
File yourFile = lastFile;
}
}
私は現在同様の問題に取り組んでおり、これでうまくいくようです。