Java项目打jar包后相对路径问题
问题描述
有一个项目项目名为Project,要将其打包为Project_jar,这个项目中一个res的资源文件夹,其下有pack1,pack2,pack3等三个包,但在打包后发现jar包中并没有res目录,而是直接把三个包放到了Project_jar中,这时若直接使用相对路径访问资源文件会出现问题
解决方案
使用类加载器获取资源流,并使用输入流去访问资源文件。该方法能获取在 bin 目录下的任意资源文件
示例代码
String filePath_relative = "pack1/file.txt"; // 资源文件路径需要为 bin 目录下的相对路径
InputStream inputStream = [MyClass].class.getClassLoader().getResourceAsStream(filePath_relative);
try(BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"))) { // 文件读取器
String str_line = ""; // 行数据
while(reader.ready()) {
str_line = reader.readLine(); // 按行读取
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("找不到文件:" + filePath_relative );
}
Ps:附上获取jar包路径的方式
try {
jarFilePath = URLDecoder.decode([MyClass].class.getProtectionDomain()
.getCodeSource().getLocation().getFile(), "UTF-8");
} catch (Exception e) {
// TODO: handle exception
}
上述代码中的 [MyClass] 需要修改为自己的当前类