0

アプリのjarファイルと同じディレクトリにあるファイルの名前を引数として取得して、そこから読み取ることができる単純なコマンドラインJavaアプリを作成したいと思います。ただし、FileNotFoundException が発生します。ここに私のコードがあります:

public static void main(String[] args) {
    if (args.length == 0) {
        System.out.println("Give the name of the input file as argument.");
    } else if (args.length > 1) {
        System.out.println("Only one input file is allowed");
    } else {
        try {
            BufferedReader in = new BufferedReader(new FileReader(args[0]));
            System.out.println("File found");
        } catch (FileNotFoundException e) {
            System.out.println("Could not find file " + args[0]);
        }
    }
}

したがって、同じディレクトリ内に a.txt という名前の txt ファイルと myApp.jar ファイルがあるとします。cmd と cd を開始して、この特定のディレクトリに移動し、次のように入力します。

java -jar myApp.jar a.txt

そして、「ファイルa.txtが見つかりませんでした」というメッセージが表示されます

私は何を間違っていますか?

編集:考えた後、クラスファイルと同じディレクトリ、つまりjar内にある必要があるため、ファイルが見つからないと思います。だから私の質問は、それがjarファイルの外にあるときにどのようにアクセスできるのですか?

4

2 に答える 2

1

「現在の」ディレクトリは、アプリケーションを起動したときに環境によって決定されます。探している場所を見つけるには、エラー出力行を次のように変更します。

System.out.println("Could not find file " + (new File(args[0])).getCanonicalPath());

(上記をコンパイルするには、main()宣言にthrows IOExceptionを追加する必要がある場合があります)。

クラスパス(またはjar)内のリソースにアクセスする場合は、ClassLoader.getResourceAsStreamを使用します。次に、InputStreamReaderを使用して、返されたInputStreamの周りにリーダーをラップします。

于 2013-01-05T20:53:22.757 に答える