java FileInputStream – 基于File对象的引用方式的差异:classloader / filesystem
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java FileInputStream – 基于File对象的引用方式的差异:classloader / filesystem,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1787字,纯文字阅读大概需要3分钟。
内容图文
我正在使用apache POI从excel文件中提取一些数据.
我需要一个InputStream来实例化POI HSSFWorkbook类HSSFWorkbook wb = new HSSFWorkbook(inputStreamX);
如果我尝试构造InputStream对象,我会发现差异
InputStream inputStream = new FileInputStream(new File("/home/xxx/workspace/myproject/test/resources/importTest.xls"));
InputStream inputStream2 = new FileInputStream(getClass().getResource("/importTest.xls").getFile());
InputStream inputStream3 = new ClassPathResource("importTest.xls").getInputStream();
如果我使用inputStream构造POI对象,它可以正常工作.
但是inputStream2和inputStream3正在抛出这个异常
java.io.IOException: Invalid header signature; read -2300849302551019537, expected -2226271756974174256
at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:100)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:84)
似乎二进制文件的标题不同,并且库无法将其识别为Excel文件.我不明白为什么.
我看到的唯一区别是inputStream2& 3正在使用类加载器来定位文件. (ClassPathResource是春季班).
我想将文件路径与系统分开.所以我更喜欢inputStream2或3之类的东西.
你知道为什么会这样吗?
谢谢
更新:
我尝试将inputStream和inputStream2写入磁盘. inputStream附带的excel文件是Ok. inputStream2包含一个excel文件,其中包含一些包含真实内容的奇怪字符.
似乎maven在构建过程中以某种方式破坏了excel文件.
所以它基本上是我用classLoader检索的文件(在/home/xxx/workspace/myproject/target/test-classes/importTest.xls下),这是不行的.
任何的想法?
解决方法:
问题似乎是maven的filtering选项.如果pom看起来像这样
<testResource>
<directory>${basedir}/src/test/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.sql</include>
<include>**/*.xls</include>
</includes>
<filtering>true</filtering>
</testResource>
当xls文件上的过滤选项设置为true时,它会破坏它们.
内容总结
以上是互联网集市为您收集整理的java FileInputStream – 基于File对象的引用方式的差异:classloader / filesystem全部内容,希望文章能够帮你解决java FileInputStream – 基于File对象的引用方式的差异:classloader / filesystem所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。