1

ソースコードはありませんが、使用したいjarファイルがあります。

jar ファイルは、ファイルの読み取りを要求し、入力ファイルとデータに使用する多数の「ヘルパー」ファイルの組み合わせを使用して出力ファイルを生成します。予想されるホームディレクトリから実行すると完全に正常に動作しますが、jar をどこからでも実行できるスクリプトを作成しようとしています。

問題は、ホーム ディレクトリ以外の場所から jar ファイルを実行しようとすると、データを適切に生成するために必要なサポート ファイルが見つからないことです。

予想されるホームディレクトリからファイルを実行する場合、入力ファイルの完全なアドレスを指定する必要があります。そうしないと、ファイルが見つかりません。相対パスだけを指定できるようにしたいと思います.Javaは、スクリプトを呼び出している人がいるディレクトリを確認することを知っています.

bashスクリプトでJavaにコマンドライン引数を渡す方法はありますか?相対ファイル パスを解決しますか? -classpath論点みたいなもの?

4

2 に答える 2

0

--classpath(または)を使用-cpすると、Javaプログラムに依存関係クラスを取得する場所を指示できます。だから、おそらくあなたがあなたのファイルディレクトリで好きなら

$JAVA_HOME/bin/java -cp '.:/path/to/the/original/program' My.class myfile.txt

次に、プログラムを終了し、ファイルも検索します。

アップデート

それが機能しない場合は、別の方法でファイルを強制的にロードしてみてください。Javadocによると:

デフォルトでは、java.ioパッケージ内のクラスは常に現在のユーザーディレクトリに対して相対パス名を解決します。このディレクトリは、システムプロパティによって名前が付けられ、user.dir通常、Java仮想マシンが呼び出されたディレクトリです。

したがって、次のように元のディレクトリからプログラムを実行してみることができます。

$JAVA_HOME/bin/java -Duser.dir=/path/to/the/files/directory My.class myfile.txt

UPDATE2

コメントで書いたように、あなたは試すことができますsymlinks元のディレクトリで次のコマンドを実行します。

ln -s /path/to/the/files/directory datafiles

$JAVA_HOME/bin/java My.class datafiles/myfile.txt
于 2013-01-29T17:16:21.820 に答える
-1

すみません - 無視してください。あなたの質問の最初の行を見逃しました。


2 つのパスを引数として jar ファイルに渡し、実行時にパスの場所を追加できます。これを行うには多くの方法がありますが、その 1 つを次に示します。

java -DdirectoryA="/somewhere" -DdirectoryB="/elsewhere" -jar program.jar 

そしてあなたのコードで

String pathA = System.getProperty("directoryA");
于 2013-01-29T16:56:30.473 に答える