加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何访问已编译jar中的资源?

发布时间:2020-12-14 06:03:37 所属栏目:Java 来源:网络整理
导读:首先,我读过许多S.O.关于这个主题的问题,我已经尝试了他们提出的建议. 这是我的情况.我正在使用Processing框架编写Java应用程序,我正处于最后阶段,我需要开始考虑打包应用程序.可以从命令行执行的jar文件是我尝试使用Eclipse中的Export功能构建的. 我的项目
首先,我读过许多S.O.关于这个主题的问题,我已经尝试了他们提出的建议.

这是我的情况.我正在使用Processing框架编写Java应用程序,我正处于最后阶段,我需要开始考虑打包应用程序.可以从命令行执行的jar文件是我尝试使用Eclipse中的Export功能构建的.

我的项目结构如下:

src/
   multiple packages/
libs/
   jar files and natives
data/
   fonts and images
config/
   json files

当我导出jar文件并用uzip jar来检查它的内容时,我发现这些目录的内容已被转储到.jar的顶层.

看起来像这样:

.jar
    packages
    jar files
    fonts
    json files

所以,当我尝试加载配置文件时,例如:

BufferedReader reader = new BufferedReader( new FileReader( path ) );

当我在Eclipse中运行应用程序时,一切都正常工作.但是jar文件会抛出FileNotFoundException.

我在S.O.上看过很多问题.关于这些问题建议使用class.getClass().getResource()或class.getResourceAsStream().我已尝试使用相对路径和文件名,如下所示:

class.getResource( 'config.json' );
class.getResources( 'cfg/config.json' );
class.getResourceAsStream( '../../config.json' );

当从Eclipse或jar运行时,所有这些方法都返回null:

java -jar myjarfile.jar

我也愿意使用Ant文件.实际上,我现在正在使用导出功能生成的Ant文件来构建jar.如果我可以添加一些内容,将目录添加到jar中也会很棒.

解决方法

要访问根目录中的资源,请在路径前添加/.如果没有,则相对于当前包执行此操作,这通常仅在资源实际位于源中的类旁边时才有用.

所以使用class.getResourceAsStream(“/ config.json”);到达jar的根目录中的config.json.

另请注意,不直接支持jars-inside-jars.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读