ClassPathResource 读取文件本地正常打包后异常
代码:
里面使用了classPathResource.getFile().listFiles()
获取一个目录下全部的文件,然后返回的是file数组。
文件放在了resource下的一个目录中
在本地正常使用,但是打成jar包,部署到服务器,使用java -jar
启动后,出现异常:
从异常中来看,大概是说:目标目录在一个jar包里面,我们使用的是ClassPathResource
的getFile方法获取了目录的file对象,然后通过listFiles获取目录下全部的文件。
问题就在这里:
通过转换绝对路径,然后直接读取
File类需要的路径是一个独立的文件的路径,但是我们给的是jar内的一个路径,就无法读取了。
网上也有很多这样的资料,我也没有一一尝试,或许网上的解决方案对于我来说也可行。
我说下我的解决方案,仅供参考:
因为我读取的是一个xml文件,后面需要使用SAXReader解析xml的。在xml中引入了.dtd文件。
这是解析的代码
我直接给reader.read传入一个文件对象,就行了。
但是现在使用ClassPathResource无法直接获取到file对象。
通过查看网上的资料,说使用流可以。
于是就修改成:reader.read(classPathResource.getInputSttream())
这个编译到是也没有问题,但是在运行的时候,出现了异常:
后来想了想,应该是xml中配置的dtd是相对路径,但是解析的时候变成绝对路径的时候出错了
于是使用reader.read(classPathResource.getInputStream(), "classpath:" + dtdpath);
本地又可以启动了。
同时服务器启动也正常了。