【Java】System.getPropertyのuser.dirの理解について

文字通りの解釈

System.getProperty("user.dir") メソッドは、Java プログラムを実行するコマンドを実行するためのパスを返します。この文は少し曖昧なので、例を使って説明するのが最善です。

2 人のユーザー (1 人は root、もう 1 人は通常のユーザー userone) が存在し、実行可能 jar パッケージは /home/userone/ の下にあり、jar パッケージを実行する sh スクリプトは /home/userone/ の下にあります。実行可能 jar パッケージは、System.getProperty("user.dir") メソッドを出力した結果です。

rootとして実行する

  1. 現在のパスは /home の下にあります。つまり、pwd コマンドは /home を返し、java -jar を直接実行し、出力結果を確認します。
> pwd
> /home

> java -jar /home/userone/xx.jar

控制台输出:
/home
  1. 現在のパスは /home/userone の下にあります。つまり、pwd コマンドは /home/userone を返し、java -jar を直接実行し、出力結果を確認します。
> pwd
> /home/userone

> java -jar /home/userone/xx.jar

控制台输出:
/home/userone
  1. 現在のパスは /home の下にあります。つまり、pwd コマンドは /home を返し、start.sh スクリプトを実行して jar パッケージを実行し、出力を表示します。
> pwd
> /home

> ./userone/start.sh

控制台输出:
/home
  1. 現在のパスは /home/userone の下にあります。つまり、pwd コマンドは /home/userone を返し、start.sh スクリプトを実行して jar パッケージを実行し、出力を表示します。
> pwd
> /home/userone

> ./start.sh

控制台输出:
/home/userone

ユーザーワンが実行します

  1. 現在のパスは /home の下にあります。つまり、pwd コマンドは /home を返し、java -jar を直接実行し、出力結果を確認します。
> pwd
> /home

> java -jar /home/userone/xx.jar

控制台输出:
/home
  1. 現在のパスは /home/userone の下にあります。つまり、pwd コマンドは /home/userone を返し、java -jar を直接実行し、出力結果を確認します。
> pwd
> /home/userone

> java -jar /home/userone/xx.jar

控制台输出:
/home/userone
  1. 現在のパスは /home の下にあります。つまり、pwd コマンドは /home を返し、start.sh スクリプトを実行して jar パッケージを実行し、出力を表示します。
> pwd
> /home

> ./userone/start.sh

控制台输出:
/home
  1. 現在のパスは /home/userone の下にあります。つまり、pwd コマンドは /home/userone を返し、start.sh スクリプトを実行して jar パッケージを実行し、出力を表示します。
> pwd
> /home/userone

> ./start.sh

控制台输出:
/home/userone

結論は

実際の状況から見ると、System.getProperty(“user.dir”) によって返される結果は、ユーザー、jar パッケージ、または jar パッケージを実行する sh スクリプトとは何の関係もなく、パスに関係するだけです。 Java コマンドを実行します (直接実行するか、sh スクリプトを介して実行します)。したがって、ここで注意する必要があるのは、Java プログラムを実行するときは、特定のパスで実行する必要があるということです。前回は /home 配下で実行し、今回は /root 配下で実行すると結果が異なります。ファイルのアップロードとダウンロードが含まれる場合、このパスも変更されます。



System.getProperty("user.dir") で取得されるのが「作業ディレクトリ」だそうですが、これを気にするベテランもいますが、作業ディレクトリってどうやって理解していますか?簡単なテストをしてみました。

ただし、この設定ファイルはプロジェクトのルートディレクトリ下、つまりプロジェクトフォルダの直下に配置しますが、このときプレフィックスなしで読み込むことができます。

ただし、このように設定ファイルを配置するのは少し不適切な気がします。

では、エラーが報告されないようにこのパスを記述するにはどうすればよいでしょうか?

1. Java プロジェクト内の設定ファイルを読み込みます。プロジェクトのパッケージ化は jar タイプです。

System.getProperty(“user.dir”);
説明:
デフォルトで配置される現在のユーザー ディレクトリ (“user.dir”) (つまり、プロジェクトのルート ディレクトリ)
JVM は、「user.dir」 + " に基づくことができます。 「自分で設定したディレクトリ」 完全なパス (つまり、絶対パス) を取得することが前提となります
。あなたのプロジェクトは Web プロジェクトではありません。それ以外の場合、戻り値はプロジェクトのルート ディレクトリではなく、bin ディレクトリです。トムキャットの。

おすすめ

転載: blog.csdn.net/qq_43842093/article/details/130663935