ClassPathResource 读取文件本地正常打包后异常

323 阅读1分钟

ClassPathResource 读取文件本地正常打包后异常

代码:

image-20200807115640657

里面使用了classPathResource.getFile().listFiles()获取一个目录下全部的文件,然后返回的是file数组。

文件放在了resource下的一个目录中

image-20200807115906279

在本地正常使用,但是打成jar包,部署到服务器,使用java -jar 启动后,出现异常:

image-20200807120051836

从异常中来看,大概是说:目标目录在一个jar包里面,我们使用的是ClassPathResource的getFile方法获取了目录的file对象,然后通过listFiles获取目录下全部的文件。

问题就在这里:

image-20200807120335622

通过转换绝对路径,然后直接读取

image-20200807120447052

File类需要的路径是一个独立的文件的路径,但是我们给的是jar内的一个路径,就无法读取了。

网上也有很多这样的资料,我也没有一一尝试,或许网上的解决方案对于我来说也可行。

我说下我的解决方案,仅供参考:

因为我读取的是一个xml文件,后面需要使用SAXReader解析xml的。在xml中引入了.dtd文件。

这是解析的代码

image-20200807120749108

我直接给reader.read传入一个文件对象,就行了。

但是现在使用ClassPathResource无法直接获取到file对象。

通过查看网上的资料,说使用流可以。

于是就修改成:reader.read(classPathResource.getInputSttream())

这个编译到是也没有问题,但是在运行的时候,出现了异常:

image-20200807121137010

后来想了想,应该是xml中配置的dtd是相对路径,但是解析的时候变成绝对路径的时候出错了

于是使用reader.read(classPathResource.getInputStream(), "classpath:" + dtdpath);本地又可以启动了。

同时服务器启动也正常了。