ファイルのgetAbsolutePathメソッドの現在の作業ディレクトリに関する混乱
ファイルのgetAbsolutePathは、相対パスまたはファイル名のみがファイルコンストラクターで指定されている場合、現在の作業ディレクトリの前に付けることで絶対パスを解決する傾向があります。
現在の作業ディレクトリの定義は、Javaプログラムを実行するディレクトリです。私の例では、私のJavaプログラムは内部にありますD:\my-app\src\App.java
私がするとき System.out.println(System.getProperty("user.dir"));
次に、理想的には印刷する必要があります D:\my-app\src
しかし、実際には印刷しています D:\my-app
なぜそうなのですか?
回答
IntelliJからアプリケーションを起動すると、その作業ディレクトリは、[実行/デバッグ構成]ダイアログの[作業ディレクトリ]で設定されている内容に従って設定されます。
そこで、作業ディレクトリをなどの固定値に設定できますD:\my-app\src
。別のオプションは、パス変数を使用することです。明らかに利用可能な変数のリストは、多くのものに依存する可能性があります-ダイアログを開いて、利用可能なものを確認してください。私が目$FileDir$
にするオプションの1つは、ソースコードファイルのディレクトリだと思います。
私は解決策を見つけたと思います。Intellijは、srcフォルダーをソースフォルダーとして暗黙的に設定することにより、実際に問題を引き起こしていました。Intellij内のモジュール設定に移動して見つけました。コマンドプロンプトから同じものを実行すると、正しい作業ディレクトリD:\my-app\src\
が選択されます。