1️⃣ new File() 形式(相对路径或绝对路径)


File file = new File("D:/temp/data.xlsx"); // 绝对路径 File file = new File("data/data.xlsx"); // 相对路径,相对于当前 JVM 的 working directory

特点

  • 依赖文件系统路径,和程序打包方式无关

  • 相对路径依赖 JVM 的工作目录(一般是启动命令所在目录)

  • 绝对路径在任何地方都可以找到,只要该路径存在

适用场景

  • 文件必须存在于操作系统的磁盘上

  • 用户上传、日志、临时文件、外部配置文件等

  • 你不能把文件打包到 jar 中再读取

注意

  • 如果程序打包成 jar,jar 内部的资源无法通过 File 访问

  • 相对路径在不同操作系统、不同启动目录下可能找不到文件


2️⃣ ClassLoader / classpath 读取(getResourceAsStreamClassPathResource


InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/data.xlsx");

或者 Spring 风格:


Resource resource = new ClassPathResource("template/data.xlsx"); InputStream in = resource.getInputStream();

特点

  • 读取 classpath 中的资源(通常在 src/main/resources

  • 支持 jar 内部资源

  • 返回 InputStream,不依赖物理路径

适用场景

  • 模板文件(Excel、Word)

  • 静态配置文件(application.properties 外的额外配置)

  • 不希望依赖文件系统,打包成 jar 后依然可用

注意

  • 只能读取 jar 内或者 classpath 下的资源

  • 不适合写入,主要用于 读取


3️⃣ 绝对路径 vs 相对路径判断方法

场景 使用方式 说明
外部文件(用户上传/临时数据/服务器固定目录) 绝对路径 (/data/file.xlsx) 不随 jar 位置变化
开发阶段调试(本地测试) 相对路径 (data/file.xlsx) 工作目录不同可能路径不同
项目资源模板(Excel、配置) ClassLoader / classpath (getResourceAsStream) jar 内可访问,便于打包部署

经验法则

  • 文件随项目打包 → classpath

  • 文件独立于项目,用户可操作 → 文件系统路径

  • 不确定是否打包 jar → 尽量 classpath

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐