1

複数の依存関係を持つ巨大なコマンド ライン アプリケーションで現在のユーザー パスを取得しようとしています。毎回「。」を使用すると、現在のユーザー パス (呼び出しが行われている場所) ではなく、アプリケーション パス (jar が存在する場所) が表示されます。

したがって、これが実行されると:

File file = new File(".");
System.out.println(file.getCanonicalPath());

アプリケーションが存在するパスを教えてくれます。

しかし、別の小さなアプリケーションを作成し、同じコードを使用すると. 別のディレクトリから jar を呼び出すと、現在のユーザー パスが表示されます。

コマンドライン引数にJSAPコマンドラインパーサーを使用していますが、同じように機能します。これはどのように解決できますか?大きなアプリケーションで、アプリケーション パスではなく、現在のユーザー パスを取得する必要があります。

彼らが異なる行動をとる原因は何ですか?

4

4 に答える 4

3

「大きなアプリケーション」を起動するバッチ ファイル (/shell スクリプト) が、Java を開始する前にディレクトリをメインの jar ファイルのディレクトリに変更していることがわかると思います。これが、単純なテスト アプリケーションがnew File(".")しばらくの間ユーザーの作業ディレクトリを返す理由です。大きなアプリは jar ファイルのディレクトリを返します。

ユーザーの CWD をバッチ ファイルの早い段階で保存してから、Java に渡してみます。

set savedcwd=%cd%
... later on ...
java "-Dsavedcwd=%savedcwd%"

次に、アプリケーションで

String savedcwd = System.getProperty("savedcwd");
于 2012-09-04T18:26:33.580 に答える
1
String currentDir = new File(".").getAbsolutePath();
OR
System.getProperty("user.dir")
于 2012-09-04T18:26:24.100 に答える
1

http://www.mindspring.com/~mgrand/java-system-properties.htm

次のような「user.home」プロパティが必要です

System.getProperty("user.home");
于 2012-09-04T18:24:56.877 に答える
0

1)上記のように、「現在のディレクトリ」を取得したい場合、1つの方法は使用することですFile(".").getAbsolutePath()

2) ユーザーの $PATH 変数 (または任意の環境変数) を取得する場合は、次を使用しますSystem.getenv()

于 2012-09-04T18:29:39.170 に答える