ファイルのgetAbsolutePathメソッドの現在の作業ディレクトリに関する混乱

Aug 16 2020

ファイルのgetAbsolutePathは、相対パスまたはファイル名のみがファイルコンストラクターで指定されている場合、現在の作業ディレクトリの前に付けることで絶対パスを解決する傾向があります。

現在の作業ディレクトリの定義は、Javaプログラムを実行するディレクトリです。私の例では、私のJavaプログラムは内部にありますD:\my-app\src\App.java

私がするとき System.out.println(System.getProperty("user.dir"));

次に、理想的には印刷する必要があります D:\my-app\src

しかし、実際には印刷しています D:\my-app

なぜそうなのですか?

回答

1 Joni Aug 16 2020 at 15:33

IntelliJからアプリケーションを起動すると、その作業ディレクトリは、[実行/デバッグ構成]ダイアログの[作業ディレクトリ]で設定されている内容に従って設定されます。

そこで、作業ディレクトリをなどの固定値に設定できますD:\my-app\src。別のオプションは、パス変数を使用することです。明らかに利用可能な変数のリストは、多くのものに依存する可能性があります-ダイアログを開いて、利用可能なものを確認してください。私が目$FileDir$にするオプションの1つは、ソースコードファイルのディレクトリだと思います。

Sandy Aug 16 2020 at 15:29

私は解決策を見つけたと思います。Intellijは、srcフォルダーをソースフォルダーとして暗黙的に設定することにより、実際に問題を引き起こしていました。Intellij内のモジュール設定に移動して見つけました。コマンドプロンプトから同じものを実行すると、正しい作業ディレクトリD:\my-app\src\が選択されます。