Java项目读取resources资源文件路径那点事

问题描述

最近在用Eclipse做Android的时候使用jxl库简单处理了xls文件,由于我对xls文件处理不太熟练,于是创建了一个Java项目进行简单测试,没问题之后直接在安卓项目使用,但是却发现即使我把xls文件放在assets文件夹下并在Build Path里面勾选了assets文件夹依旧会抛出找不到文件的错误:FileNotFoundException,采用了

file:///android_asset/xxx.html

/assets/xxx.xls

均没有效果,依旧会抛出错误。

问题原因

一般情况下我们在本地项目引用文件,直接用绝对路径或者相对路径都可以,这两者都可以在资源文件的属性里面查看,如下图所示:

image-20220518100916219
image-20220518100916219

Android项目打包生成APK之后,会将项目打包成Jar包或者war包,此时就不会存在 assets/resources 目录,JVM会在编译项目时,主动将 java文件编译成 class文件 和 resources 下的静态文件放在 target/classes目录下;

也就是说我们在打包之后上述目录结构已经发生变化,此时再用原来的路径去索引文件,必然是索引不到的,那么我们还想去索引这个文件怎么办呢?

解决方案

我们可以用Java提供的方法获取文件流

InputStream input = this.getClass().getResourceAsStream("/assets/xxx.xls");

从而去使用文件。

需要注意的是,路径的开头的 / 是不能少的,它代表的就是从src目录-根目录,而资源文件路径就是从src开始找,这样工程打包以后同样可以找到路径。

参考:Java项目读取resources资源文件路径那点事