回答这个问题:
如何创建某种结构来打包我的可执行 jar 及其序列化文件夹?
一种常见的方法是有一个明确定义的位置来存储序列化文件、设置等,而不依赖于程序从哪里执行。通常它是用户的主目录,或者在 windows 的情况下是应用程序数据。我使用此代码来存储我的应用程序设置:
String home = System.getenv("APPDATA");
if (StringUtils.isEmpty(home)) {
home = System.getProperty("user.home");
}
CONFIG_HOME = new File(home, ".myProgram").getAbsoluteFile();
CONFIG_HOME.mkdirs();
所以在windows上它将使用AppData,而在*nix系统上它将使用用户的家。myProgram 前面的点是让它隐藏在 *nix 平台上,这是一种常见的做法。
编辑对于您在评论中的问题:
在我的 linux 机器上没有 APPDATA 环境变量,所以这段代码将创建一个目录/home/myUser/.myProgram
。在 Windows 上,它将类似于c:/Users/myUser/AppData/Local/.myProgram
. 在 MacOSX 上,不知道。