资讯专栏INFORMATION COLUMN

Java读取Jar包里的文件

hsluoyz / 2471人阅读

摘要:本地跑没有一点问题,一打成包,发到服务器上,就在下面的语句报错提示找不到文件。而对于包里的文件,则已经是文件的内部了,就已经无能为力了。

Java的IO操作,一年也用不到一次,且每次用到都会有一堆问题。

就Java路径,用一次查一次。因为用的少,用完就忘。

这次遇到一个奇葩问题。本来是一个非常简单的Excel操作,读取,填充数据。本地跑没有一点问题,一打成jar包,发到服务器上,就在下面的语句报错:

this.sourceFileName = this.getClass().getResource("Book1.xls").toURI()
                    .getPath();

提示 找不到文件。
那么我们看看什么是URI:

  

Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource
Identifier, 简称"URI")进行定位。

且根据规范,URI是这种形式地:协议名称://域名.根域名/目录/文件名.后缀
如http://www.baidu.com/xxoo.html
那么我么利用上面的java语句获得的是什么形式呢?
file://d:xx/xx/aa/bb.txt.
注意到没,利用这种形式,可以打开如上形式的某个目录文件下的文件。
而对于jar包里的文件,则已经是文件的内部了,就已经无能为力了。
也就是如果用上面方法,可以打开到.../xx/xx.jar,而没法到.../xx/xx.jar/xx.txt了。

那对于jar里的文件是不是就没法打开了?肯定不是:

InputStream inputStream = this.getClass()getResourceAsStream("Book1.xls"));

就这么简单,jar包里的文件,我们是没法以file形式读取的,而只能以InputStram的形式读取。

推荐几篇博文吧:
http://mushiqianmeng.blog.51cto.com/3970029/833649
http://www.coderli.com/jar-classloader
http://blog.csdn.net/b_h_l/article/details/7767829

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64073.html

相关文章

  • classpath对获取配置文件的影响

    摘要:,到现在为止一切都按部就班,执行上面的命令正常运行,读取里面的文件,并输出相应的属性。那么,如果我们想改变配置文件的内容是否需要修改源文件里的然后重新打包成呢显然这样做太麻烦也不太合理,你可以在外面配置一个新的让里的去读取。 Java中经常要用到各种配置文件xxx.properties来控制程序的运行或进行国际化等但是也常常遇到配置文件放置路径找不到的问题,这里以java.uitl.R...

    xumenger 评论0 收藏0
  • spring-framework的Resource知识点

    摘要:接口类三个具有代表性的实现类通过的和,我们找到利用去解析路径配置文件的路径。上面可能讲的有点绕,但却是入口之一。根据路径的特性,分别封装为或对象。另外用包里的做了实验,发现可以读到包里的信息。则是包的根地方,如,用于公共配置文件。 接口类:org.springframework.core.io.Resource 三个具有代表性的实现类: org.springframework.we...

    Jonathan Shieber 评论0 收藏0
  • maven打包oracle jdbc驱动

    摘要:背景由于版权问题,中央仓库缺少的驱动,这个给开发带来了很多不便利性。本文主要探讨的就是第三个问题,怎么把驱动打到包里背景交代完毕,正文开始。是的,如果你只是想在本地打一个包,这种方式简单方便。 背景 由于版权问题,maven中央仓库缺少oracle jdbc的驱动,这个给开发带来了很多不便利性。也出现各种各样的解决方案,基本就两种思路: 将oracle驱动安装到本地仓库,这个需要大家...

    vvpvvp 评论0 收藏0
  • Java基础-模块系统笔记(1)

    摘要:模块系统的前身是项目。最初,该项目仅仅是为设计实现一个模块系统。随着项目的不断深入,平台对标准模块系统的呼求也日益增长,批准该项目升级为平台的一部分,也能服务于和平台的需求。自定义的配置,仅包含一组指定的模块及其所需的模块。 我的博客 转载请注明原创出处。 序 从Java 9开始,在Java的世界里多了一个叫模块(JSR376)的特性。模块系统的前身是Jigsaw项目。最初,该项目仅...

    learning 评论0 收藏0
  • SSM : 环境搭建

    摘要:这个文件包含对对数据访问进行封装的所有类。为等提供的一致的声明式和编程式事务管理。 SSM 环境搭建 目录创建 pom.xml SSM 逐层配置 一、目录 1.1 src/main/java 目录下的包(以下包要放在项目包下,如:com.imooc.项目名) entity: 存放实体类 web: 存放controller,相当于Struts中的action service: 业务...

    MonoLog 评论0 收藏0

发表评论

0条评论

hsluoyz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<