残念ながら、java / clojureの世界でも、ネイティブの世界でも、プログラムの中間ファイルを配置する場所について、最終的に受け入れられている単一の規則はありません。ただし、いくつかの基本的な原則が存在すると思います。
私の知る限り、ほとんどのプログラムは、必要なすべてのファイルを配布ファイル(変更してはならないもの:アイコンやサウンドなどのリソース、またはjarファイルなどのバイナリ)、構成ファイル(ユーザーが直接、またはプログラム自体を介して)および一時ファイル(私はそれらが何であるかは明らかだと思います)。
配布ファイルは通常、パッケージマネージャー(主にLinuxシステム)を介してインストールされるか、必要に応じて、などの事前定義されたディレクトリに手動でインストールされ/opt
ます。Windowsシステムでは、これらは通常、インストールプログラムによってインストールされます。これらのファイルは直接変更されることはありませんが、通常、アップグレード時にパッケージマネージャーによって更新できます。
構成ファイルは通常、ユーザーのホームディレクトリに保存されます(プログラムがユーザーアプリケーションの場合)。悲しいことですが、これらのファイルを正確にどこに置くかについての慣習はまったくありません。UNIXシステムでは苦痛(~
雑然)ですが、Windows IMOでは、Windowsでファイルシステムに制限付き権限を設定することは広く受け入れられていないため、ファイルはファイルシステムのほぼどこにでも配置される可能性があるため、さらに悪化します。
ただし、現在、(少なくともLinuxの世界では)$XDG_CONFIG_HOME
環境変数のサブディレクトリに構成ファイルを保存する傾向があるようです。この変数は通常、~/.config
パスに解決されます。このディレクトリを設定に使用するのは正しいと確信しています。これらの変数のファミリー($XDG_{CONFIG,CACHE,DATA}_HOME
)があり、それぞれが特定の種類のファイルに使用されます。これはfreedesktopの標準だと思います。Windowsにこのようなものがあるかどうかはわかりませんが、可能性は高いです。私はこれに関するいくつかの情報を見つけようとし、そのような必要があればそれを使用したでしょう。
IntelliJ IDEA IDEなど、多くのプログラムでは、構成ディレクトリの正確な場所を明示的に設定できます。これもオプションになります。
一時ファイルは通常、システムが一時ファイル用に提供するディレクトリに保存されます。UNIXシステムでは、通常はですが/tmp
、Windowsでは、たとえばC:\Users\%USER%\AppData\Local\Temp
、Javaでは、システムプロパティを使用して一時ディレクトリの場所を取得できます。Clojureでは次のようになります
(System/getProperty "java.io.tmpdir")
正しく思い出せば、clojure標準ライブラリのどこかにこの値を取得できる関数さえあります。
このディレクトリはクリアできるため、実際には一時ファイルのみをそこに保存する必要があります(最近のLinuxディストリビューションでは、RAMにも保存されています)。
TL; DR
永続的なユーザー全体の構成(作業、キャッシュなど)ファイルを保存する場合は、~/.config
UNIXシステムではディレクトリを使用し、Windowsではいくつかの正常なディレクトリを使用します(これにはさらにグーグルが必要です)。プログラムで何らかの作業を行った後に不要な一時ファイルを保存する場合は、"java.io.tmpdir"
システムプロパティから取得できる標準のシステム一時ディレクトリを使用します。