不幸的是,无论是在 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;博士
如果要存储持久的用户范围配置(工作、缓存等)文件,请使用~/.config
unix 系统下的目录和 Windows 下的一些健全目录(需要更多谷歌搜索);如果要存储在程序中完成某些工作后不需要的临时文件,请使用可以通过"java.io.tmpdir"
系统属性获取的标准系统临时目录。