本地能跑,部署到另一台机器报 FileNotFoundException,路径写的是 D:\\data\\upload,那台机器根本没有 D 盘。日志里能对上时间点,这种反而好排。

路径、分隔符、盘符都按开发机写死,换成别的系统或别的部署目录就找不到文件。这一点先确认清楚,后面就不用反复试。

String base = System.getenv('UPLOAD_DIR');
Path p = Paths.get(base, 'a.txt');
# 配置项 UPLOAD_DIR=/data/upload

围绕「硬编码文件路径」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

处理上按这个顺序:路径改成从配置或环境变量读取;用运行目录拼接相对路径;统一用系统自带的分隔符。

结果对不对很好判断,同一份包在开发机和服务器上都能正常读写文件。

作者 9823189