你已经打上了spring的标签,所以我认为你可以使用它。
你的war包是否在部署后(例如通过Tomcat)被解压缩了?
如果是,
请使用ClassPathResource#getFile()
你的问题在于getFile()
返回的字符串。它包含一个感叹号(!
)和一个file:
协议。你可以自己处理所有这些并实现自己的解决方案,但这将是重复造轮子。
幸运的是,Spring有一个org.springframework.core.io.ClassPathResource
。要获取文件,只需简单地编写new ClassPathResource("filename").getFile();
在你的情况下,你需要替换
Contacts contactsEntity = (Contacts) um.unmarshal(new FileReader(new File(classLoader.getResource("Contacts.xml").getFile())));
使用
Contacts contactsEntity = (Contacts) um.unmarshal(new FileReader(new ClassPathResource("Contacts.xml").getFile()));
现在你的程序应该在部署和解压缩时也能正常工作。
如果没有(推荐使用,如果不确定,请使用此选项),
你必须使用一个InputStream
,因为资源并不存在于文件系统中,而是被打包在归档文件中。
这应该可以工作:
Contacts contactsEntity = (Contacts) um.unmarshal(new InputStreamReader(new ClassPathResource("Contacts.xml").getInputStream()));
(不使用Spring):
Contacts contactsEntity = (Contacts) um.unmarshal(new InputStreamReader(classLoader.getResourceAsStream("Contacts.xml")));