web-dev-qa-db-ja.com

「user.dir」プロパティが実際に何を意味するかを理解しようとしていますか?

したがって、基本的には、「user.dir」プロパティについてググったら、stackexchangeで同様の質問にこのリンクを取得しました。 Java「user.dir」プロパティ-正確には何を意味するのですか?

つまり、基本的に答えは次のとおりです。これは、Javaが実行されたディレクトリであり、JVMを起動した場所です。ユーザーのホームディレクトリ内にある必要はありません。ユーザーがJavaを実行する権限を持っている場所ならどこでもかまいません。

これは問題ありませんが、Androidコンテキスト: System.getProperty(“ user.dir”)が「/」を返す理由) としてこの他のリンクを見つけましたドキュメンテーションは言う、user.dirプロパティはユーザーの作業ディレクトリであり、apkが配置されているディレクトリと同じである必要はありません。

したがって、最初のリンクで最初に投票された回答は、ディレクトリがユーザーのホームディレクトリ内にある必要がないことを示し、もう1つは「ユーザーの作業ディレクトリです」と述べています。

今私はひどく混乱しており、これについて助けが必要です。

6
Skylar Adams

ホームディレクトリは、userに関連付けられています(ユーザーMIkeの場合、これは/home/mike)。

作業ディレクトリは、実行中のprocess;に関連付けられています。シェルでは、これは多くの場合プロンプトの一部として出力されます。他のプロセスの場合、通常、直接観察する方法はありません。ユーザーは通常、ホームディレクトリでシェルセッションを開始しますが、そこから離れることができます。

Javaがインストールされているディレクトリは、3番目の無関係なものです(およびJavaアプリケーションまたはライブラリがインストールされているディレクトリは、別の、無関係な4番目の可能性がありますディレクトリ)。しかし documentation が言うように、

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

言い換えると、 user.dirは、プロセスの開始時にJavaプロセスを開始したプロセスの作業ディレクトリです。これがシェルの場合は、シェルユーザーが最後に切り替えた先のディレクトリです。Javaがウィンドウマネージャなどの別のプログラムから呼び出された場合は、そのプログラムが機能していたものです。ディレクトリ。

7
Kilian Foth

前の回答でuser.dirが「現在のユーザーディレクトリ」であると述べているように、次の例を見てください。
cd/path/to/your/jar
$ Java_HOME/bin/Java -jar myprogram.jar
(user.dir =/path/to/your/jar)

cd $ Java_HOME/bin
Java -jar /path/to/your/jar/myprogram.jar
(user.dir = $ Java_HOME/bin)

cd〜
$ Java_HOME/bin/Java -jar /path/to/your/jar/myprogram.jar
(user.dir =ユーザーのホームディレクトリ)