java打包后读取resource文件下的路径

java读取文件的相对路径

本地运行

在本地运行时可参考我的另一篇博客:java中的相对路径用法 | 代码流畅,心情舒畅! (liu-ruyang.github.io)

打包后运行

打包成jar包之后,应该使用classpath的路径,classpath的下一级即为resources或者java文件夹的下一级。

1
2
3
4
5
6
7
8
9
// properties类型文件
InputStream inputStream = Main.class.getResourceAsStream("/params.properties");
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); // 以utf-8格式读取
Properties properties = new Properties();
properties.load(reader);

// json类型文件(使用com.alibaba.fastjson2依赖)
InputStream inputStream = Main.class.getResourceAsStream("/data.json");
jsonObject = JSON.parseObject(inputStream, StandardCharsets.UTF_8);

但这样有个致命的缺点:通过class.getResourceAsStream()获取的文件数据会保存在jar文件中,当jar中的该文件需要修改为服务器上或其他位置的文件时,则无法访问(还是打包之前的文件路径)

原因:jar相当于一个压缩包,会把所有加载的文件保存于其中,且数据不可更改(可以先解压jar文件,再重新打包成jar文件)

Contents
  1. 1. java读取文件的相对路径
    1. 1.1. 本地运行
    2. 1.2. 打包后运行
|