web-dev-qa-db-ja.com

プログラムにファイルを渡すためのコマンドライン引数の使用

コマンドライン引数としてファイルを受け取るにはどうすればよいですか?

7
Johanna

ファイルのパスだけが渡され、プログラム内で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
        }
    }
}
29
victor hugo

javaでは、おそらくお気づきかもしれませんが、mainメソッドは引数としてStringの配列を受け取ります。パラメータargsに別の名前を付けることができますが、これが最もよく使用される名前です。

配列argsには、クラス名の後に、プログラムの起動時にユーザーが入力した値が含まれています。たとえば、Fooという名前のクラスを実行するには、ユーザーは次のように入力する必要があります。

[user @ desktop〜] $ Java Foo

クラス名の後にユーザーが入力するすべてのものは、パラメーターと見なされます。例えば:

[user @ desktop〜] $ Java Foo bar baz

これで、プログラムは2つのパラメーターbarbazを受け取りました。これらのパラメータは配列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

8
cd1

私の意見では、args == 0を検出し、引数が指定されていない場合にプログラムの使用方法に関するヘルプコマンドのリストを返すことを試みるベストプラクティスです。

2
ledlogic

私は他のいくつかの解決策を見ましたが、あなたがいればそれらはうまくいかないと思います。たとえば、コマンドライン引数として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;
    }
}

私は現在同様の問題に取り組んでおり、これでうまくいくようです。

0
lpapez