程序目录路径 和 当前工作目录路径
程序目录路径 和 当前工作目录路径“程序所在目录”程序执行文件所在的目录。“当前工作目录”操作系统启动程序的目录。操作系统如何决定当前目录Windows通过资源管理器进入到程序所在目录通过双击可执行文件打开程序时当前工作目录既为当前资源管理器显示目录。由于看见才能执行因此当前工作目录正好是程序所在目录。通过命令窗口执行命令启动程序当前工作目录即为命令窗口当前所示路径。如果用户启动程序之前 通过 CD 命令 切换到了程序所在的目录当前工作目录正好在程序所在目录如果 CD 到了另外位置通过相对或绝对路径 启动程序当前工作目录在另外位置。通过快捷方式启动程序快捷方式 目标 是程序所在位置快捷方式 起始位置 是当前工作目录与快捷方式所在位置无关。执行快捷方式启动程序相当于先执行 CD 命令切换到起始位置然后启动目标程序。通过双击特定文件扩展名的文件 启动已注册关联的程序时程序所在目录是注册表中指定的程序位置当前工作目录是要打开的文件所在位置。通过 任务管理器 运行新任务当前工作目录为 指定的执行文件所在目录。Linux通过命令终端窗口 启动程序当前工作目录即为命令窗口当前所示路径。如果用户在启动程序之前 cd 的位置正好是程序所在目录那么当前工作目录正好是程序所在目录如果位于其他位置当前工作目录则不同于程序所在目录。启动注册的 systemctl 服务程序当前工作目录为 服务文件(***.service)中的WorkingDirectory所指定的路径位置。在 Linux 中 通过桌面图标启动程序时当前工作目录 为 程序注册文件(***.desktop)中Path所指定的路径位置。Java 获取当前工作目录Java 程序启动后以相对路径打开的文件指向当前目录中的文件。// 当前目录/config.properties final File file new File(config.properties); // 当前目录/data/device.odbs final File file new File(data/device.odbs); // 当前目录绝对路径 System.out.println(new File().getAbsolutePath()); // D:\JOYZL\scada\server System.out.println(new File(.).getAbsolutePath()); // D:\JOYZL\scada\server\. System.out.println(Path.of().toAbsolutePath()); // D:\JOYZL\scada\server System.out.println(Path.of(.).toAbsolutePath()); // D:\JOYZL\scada\server\.Java 获取程序所在目录Java 程序未提供 标准 API 获取程序所在目录原则上 程序不应当 非要读取 此位置的文件。随同程序一并分发的非程序文件应当纳入资源按程序资源读取。关于 Java 的 System.getProperty(“user.dir”) 可通过命令行参数指定其位置它不代表程序所在目录。默认行为与操作系统相同由 JVM 提供默认值。如果非要不可只能通过系统环境参数提取 System.getProperty(name)且目前只发现以下唯一个 可能的选择。JPackage 打包后的可执行程序具有以下参数jpackage.app-path指向可执行程序位置例如D:\JOYZL\scada\station.exe以下为 AI 提供的错误答案Application.class.getProtectionDomain().getCodeSource().getLocation();实际获取到的是包或模块位置例如// jrt:/com.joyzl.scada.serverManagementFactory.getRuntimeMXBean().getInputArguments()获取的是 JVM 启动参数启动可能包含 “-Duser.dir” 或 “-Djpackage.app-path”以上是我们在参与 JOYZL SCADA 项目开发时对 程序目录路径 和 当前工作目录路径 基于 Java 的验证。